博客
关于我
排序(插入排序、起泡排序、选择排序和快速排序)
阅读量:563 次
发布时间:2019-03-09

本文共 2617 字,大约阅读时间需要 8 分钟。

排序

一、二、插入排序

插入排序是一种简单而有效的排序算法,其思想是将一条记录插入到已排序的表中,使之保持有序。

1. 直接插入排序

直接插入排序是一种最常用的插入排序方法。

算法思想:逐步将记录插入到已排好序的有序表中。

实现代码:

void InsertSort(int a[], int n) {    int i, j, t;    // 从第二个元素开始插入    for (i = 2; i <= n; i++) {        // 插入的位置        if (a[i-1] > a[i]) {            // 交换中间变量            t = a[i];            // 将要插入的元素向左移动            for (j = i-1; a[j] > t; j--) {                a[j+1] = a[j];            }            a[j+1] = t;        }    }}

2. 折半插入排序

与直接插入排序相比,折半插入排序在插入位置的选择上更优。

算法思想:采用折半查找法确定插入位置。

实现代码:

void BInsertSort(int a[], int n) {    int i, j, t;    int low, high, mid;    // 控制循环的趟数,每一趟采用折半查找    for (i = 2; i <= n; i++) {        a[0] = a[i];        low = 1;        high = i - 1;        while (low <= high) {            mid = (low + high) / 2;            if (a[mid] >= a[0]) {                high = mid - 1;            } else {                low = mid + 1;            }        }        // 移动记录到正确位置        for (j = i-1; j >= high + 1; j--) {            a[j+1] = a[j];        }        a[high+1] = a[0];    }}

二、起泡排序

起泡排序是一种简单的稳定排序算法,逐步将较大的元素“冒泡”到已排序的位置。

算法思想:从前向后依次检查每一对相邻元素,发现逆序后交换位置。

实现代码:

void BubSort(int a[], int n) {    int i, j, t;    // 控制循环的趟数    for (i = 1; i < n; i++) {        // 配对检查的范围逐渐缩小        for (j = 1; j <= n - i; j++) {            if (a[j] > a[j+1]) {                t = a[j];                a[j] = a[j+1];                a[j+1] = t;            }        }    }}

三、快速排序

快速排序是一种高效的分治排序算法,通过一次排序将记录分割成两部分。

算法思想:选择一个记录作为枢轴,将数组划分为两部分,分别对每一部分递归排序。

实现代码:

// 第一趟排序int Partition(int a[], int low, int high) {    int pkey = a[low];    while (low < high) {        while (a[high] >= pkey && low < high) {            high--;        }        a[low] = a[high];        while (a[low] < pkey && low < high) {            low++;        }        a[high] = a[low];    }    a[low] = pkey;    return low;}// 递归排序void QSort(int a[], int low, int high) {    if (low < high) {        int mid = Partition(a, low, high);        QSort(a, low, mid - 1);        QSort(a, mid + 1, high);    }}// 适用于数组从索引1开始void QuickSort(int a[], int n) {    QSort(a, 1, n);}

四、简单选择排序

简单选择排序是一种稳定排序算法,通过每次选取最小记录来逐步建立排序。

算法思想:

  • 第一趟:从n个记录中选择一个最小记录交换到第一个位置。
  • 第二趟:从剩下n-1个记录中选择一个最小记录交换到第二个位置。
  • 第三趟:依次类推,直到所有记录排好序。
  • 实现代码:

    void SelectSort(int a[], int n) {    int i, j;    int min, t;    // 第一趟:找最小值放第一位    for (i = 1; i < n; i++) {        min = a[i];        for (j = i+1; j < n; j++) {            if (a[j] < min) {                min = a[j];            }        }        for (j = i+1; j >= (a[i] = min); j--) {            t = a[j];            a[j] = a[j-1];            a[j-1] = t;        }    }}

    通过以上各算法的理解和实现,可以方便地对不同数据量和规模的数据进行排序处理。

    转载地址:http://vytpz.baihongyu.com/

    你可能感兴趣的文章
    Python基础语法与执行脚本的3种方式
    查看>>
    python基础篇(1):type()
    查看>>
    python基础篇(15):闭包
    查看>>
    python基础篇(11):封装
    查看>>
    python基础篇(10):自定义包
    查看>>
    python基础篇(10):类、对象与构造方法
    查看>>
    python系列【仅供参考】:python斗地主
    查看>>
    Python基础教程(第2版 修订版) pdf
    查看>>
    python基础实践(四)
    查看>>
    Python基础学习笔记(九)常用数据类型转换函数
    查看>>
    Python基础学习参考(五):字符串和编码
    查看>>
    Python基础学习
    查看>>
    python基础变量之---集合
    查看>>
    python基础变量之---字典
    查看>>
    python基础变量之---列表
    查看>>
    python基础变量之---元组
    查看>>
    python基础内容_Python基础入门必须了解的
    查看>>
    Python基础之面向对象2(封装)
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>