ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

八大排序算法(2/6)

来源:网络整理     时间:2016-06-29     关键词:

本篇文章主要介绍了" 八大排序算法",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 八大排序算法标签:算法 查找和排序1. 插入排序—直接插入排序 ( 稳定的 O(nlogn) )基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个...

void ShellInsertSort(vector<int> &num, int n, int dk) {
    for (int i = dk; i < n; ++i) {
        int j = i;
        while (j - dk >= 0 && num[j] < num[j - dk]) {
            swap(num[j], num[j - dk]);
            j -= dk;
        }
    }
}
void ShellSort(vector<int> &num) {
    int dk = num.size() / 2;
    while (dk >= 1) {
        ShellInsertSort(num, num.size(), dk);
        dk /= 2;
    }
}

3. 选择排序—简单选择排序(Simple Selection Sort) (不稳定 O(n2) )

基本思想:

在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。

操作方法:

第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;
第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换;
以此类推…..
第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与第i 个记录交换,
直到整个序列按关键码有序。

算法实现:

int SelectMinKey(vector<int> &num, int i) {
    int minKey = i;
    for (int j = i + 1; j < num.size(); ++j) {
        minKey = num[j] < num[minKey] ? j : minKey;
    }
    return minKey;
}
void SimpleSelectSort(vector<int> &num) {
    for (int i = 0; i < num.size(); ++i) {
        int minKey = SelectMinKey(num, i);
        if (minKey != i)
            swap(num[minKey], num[i]);
    }
}

4. 选择排序—堆排序(Heap Sort) ( 不稳定的 O(nlogn) )

基本思想:

相关图片

相关文章