C++中级算法第五天(希尔排序)

希尔排序(百度解释):

希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
代码如下(有注释):

#include<iostream>

using namespace std;

void print(int a[], int n) {

    for (int j = 0; j < n; j++) {
        cout << a[j] << "  ";
    }

    cout << endl;

    return;
}

void ShellInsertSort(int a[], int n, int d) {

    //从第2个数据开始插入
    for (int i = d; i < n; ++i) {

        int j = i - d;

        //记录要插入的数据
        int temp = a[i];

        //从后向前,找到比其小的数的位置
        while (j >= 0 && a[j] > temp) {

            //向后挪动
            a[j + d] = a[j];
            j -= d;
        }

        //存在比其小的数
        if (j != i - d)
            a[j + d] = temp;

        print(a, n);
    }

    return;
}

int shellSort(int a[], int n) {

    int d = n / 2;

    while (d >= 1) {

        ShellInsertSort(a, n, d);
        d = d / 2;
    }
    return;
}

int main(void) 
{
    int a[10] = { 3,1,5,7,2,4,9,6,10,8 };
    cout << "初始值:";
    print(a, 10);

    shellSort(a, 10);
    cout << "结果:";
    print(a, 10);

    return 0;
}
    原文作者:ja先生
    原文地址: https://www.jianshu.com/p/1e4fef47bf94
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞