希尔排序

Posted 我是一个小木匠!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序相关的知识,希望对你有一定的参考价值。

/*
 * 希尔排序(在具有几万组数据量排序时有较好的表现~)
 * 1.希尔排序的整体时间复杂度与增量序列的选取有关,目前没有统一的最优增量序列。
 * 2.Sedgewick增量序列:{1,5,19,41,109,。。} 按照 9*4^i-9*2^i+1或4^i-3*2^i+1进行选取。
   猜想时间复杂度: 平均:O(n^6/7) 最坏: O(n*4/3)..
 */
#include "iostream"
using namespace std;    
int N = 10;
int a[10] = { 3,2,1,5,7,6,9,8,2,0 };
void shellSort() {
    int si, d, p, i;
    int Sedgewick[] = { 929,505,209,41,19,5,1,0 };
    for (si = 0; Sedgewick[si] >= N; si++); /* 初始的sedgeWick[si]不能超过排序数组的长度 */ 

        for (d = Sedgewick[si]; d > 0; d = Sedgewick[++si])
            for (p = d; p < N; p++) { /* 插入排序 */
                int temp = a[p];
                for (i = p; i >= d&& a[i - d] > temp; i -= d)
                    a[i] = a[i - d];
                a[i] = temp;
            }
}
void print() {
    for (int i = 0; i < N; i++)
        cout << a[i] << " ";
    cout << endl;
}
int main() {
    shellSort();
    print();
}

 

以上是关于希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

希尔排序

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

希尔排序图解与代码

算法-java代码实现希尔排序

希尔排序JAVA代码

《算法》笔记 3 - 选择排序插入排序希尔排序