一经开掘比前第n个因素小就和前第n个因素调换个方式置,如若发掘比前第n个要素小就和前第n个成分调换个地点置

  希尔排序 no 落成

  希尔排序 no 落成

  希尔排序其实便是插入排序。只然则希尔排序在相比较的要素的距离不是1。
大家知晓插入排序 都是二个一个和事先的因素比较。发掘比从前成分小就交流地方。不过希尔排序恐怕是和前第n个成分相比,倘诺发掘比前第n个因素小就和前第n个因素沟通地点。具体看下图

  希尔排序其实正是插入排序。只可是希尔排序在相比的要素的间隔不是壹。
大家明白插入排序 都是2个2个和事先的因素相比。发掘比在此以前成分小就互交换一下地方置。不过希尔排序大概是和前第n个因素相比较,假设开采比前第n个要素小就和前第n个要素沟通地方。具体看下图

    图片 1

    图片 2

  第一趟比较。n是为5。也正是说各样数和前面第三个数相比。倘诺发现小于前边第多少个数的话。交流个地点置。

  第贰趟比较。n是为五。也正是说每一种数和后边第五个数相比。要是开采小于前边第⑤个数的话。沟通地方。

  所以我们看出 7二 比 592 小。
所以交流地点。 2捌三 比 34八 小。继续调换

  所以咱们来看 7二 比 5九二 小。
所以调换地方。 2捌三 比 34八 小。继续交流

  第二趟相比较。 n 是二。同理

  第三趟比较。 n 是二。同理

  最终叁遍相比。n是一,注意今年正是插入排序了。

  最终二遍相比。n是一,注意这年正是插入排序了。

  这几个 5 二 一那种增量数字的选料到底是依照什么来抉择的。其实笔者也不驾驭,一般的数字都足以,只可是质量不必然那么快。还有诸如4排序了。 贰 再排序的话
质量就会差那么一点。因为相对于41度排序了的数组。已经有一些的数组已经排好序了。

  那些 5 二 1那种增量数字的挑3拣四到底是依照什么来抉择的。其实本人也不明了,一般的数字都足以,只可是品质不必然那么快。还有诸如4排序了。 二 再排序的话
品质就会差那么一点。因为相对于四早已排序了的数组。已经有一些的数组已经排好序了。

  那里给出多少个异常的快的
排序增量的sequence

  那里给出多少个相当的慢的
排序增量的sequence

  

  

图片 3图片 4

图片 5图片 6

    //Sedgewick 增量序列的最坏时间复杂度为 O(N4/3);平均时间复杂度约为 O(N7/6)。
    //hi=max(9∗4^n−9∗2^n+1, 2^(n + 2) * (2^(n + 2) - 3)) + 1
    //5 是由N = 0 得出来的
    //28
    private static int INCREMENT_SEQUENCE_SEDGEWICK[] = {
            1,5,19,41,109,209,505,929,
            2161,3905,8929,16001,36289,64769,146305,260609,
            587521,1045505,2354689,4188161,9427969,16764929,37730305,67084289,
            150958081,268386305,603906049,1073643521};
    //Sedgewick 增量序列的最坏时间复杂度为 O(N4/3);平均时间复杂度约为 O(N7/6)。
    //hi=max(9∗4^n−9∗2^n+1, 2^(n + 2) * (2^(n + 2) - 3)) + 1
    //5 是由N = 0 得出来的
    //28
    private static int INCREMENT_SEQUENCE_SEDGEWICK[] = {
            1,5,19,41,109,209,505,929,
            2161,3905,8929,16001,36289,64769,146305,260609,
            587521,1045505,2354689,4188161,9427969,16764929,37730305,67084289,
            150958081,268386305,603906049,1073643521};

INCREMENT_SEQUENCE_SEDGEWICK

INCREMENT_SEQUENCE_SEDGEWICK

 

 

图片 7图片 8

图片 9图片 10

    //Knuth  sequence 3N + 1 , N 是之前的元素
    //O(n^1.5)
    //20
    int INCREMENT_SEQUENCE_KNUTH[] = {
            1,4,13,40,121,364,1093,3280,
            9841,29524,88573,265720,797161,2391484,7174453,21523360,
            64570081,193710244,581130733,1743392200};
    //Knuth  sequence 3N + 1 , N 是之前的元素
    //O(n^1.5)
    //20
    int INCREMENT_SEQUENCE_KNUTH[] = {
            1,4,13,40,121,364,1093,3280,
            9841,29524,88573,265720,797161,2391484,7174453,21523360,
            64570081,193710244,581130733,1743392200};

INCREMENT_SEQUENCE_KNUTH

INCREMENT_SEQUENCE_KNUTH

 

 

  具体的得以达成能够在此地看到
->>>>>>https://github.com/Cheemion/algorithms/blob/master/src/com/algorithms/sort/ShellSort.java

  具体的落到实处能够在那边看到
->>>>>>https://github.com/Cheemion/algorithms/blob/master/src/com/algorithms/sort/ShellSort.java

  那里还有关于怎样shell排序极快的原由https://www.zhihu.com/question/24637339

  这里还有关于怎样shell排序极快的来由https://www.zhihu.com/question/24637339

  Sedgewick 增量系列的ShellSort
最坏时间复杂度为 O(N4/3);平均时间复杂度约为 O(N7/陆)

  Sedgewick 增量类别的ShellSort
最坏时间复杂度为 O(N4/三);平均时间复杂度约为 O(N7/陆)

相关文章