希尔排序

一 希尔排序

  希尔排序是优化的直接插入排序,直接插入排序可以看做是增量为1的希尔排序。希尔排序又称为缩小增量排序。

二 直接插入排序

  直接插入排序是两个for循环,第一层for的i从step开始向后直到小于len,并取base=array[step],第二层for的j从i-step开始向前直到0或者array[j]<=base。

  希尔排序从大增量开始,每次缩小增量进行直接插入排序。

  ① Shell增量序列 {N, N/2, N/2/2, ... , 1}

  ② Hibbard增量序列 {1, 3, 7, ..., 2^k-1}

  ③ Sedgewick增量序列 {1, 5, 19, 41, ...}  

    序列一:9 * 4^i - 9 * 2^i + 1 -- 1, 19, 109 

    序列二:2^(i+2) * (2^(i+2) -3) + 1 -- 5, 41

 1 void insertSort(int *myArray, int step, int len)
 2 {
 3     for (int i=step; i < len; i+=step)
 4     {
 5         int base = myArray[i];
 6 
 7         int j=i-step;
 8         for (; j>=0 && myArray[j]>base; j-=step)
 9             myArray[j+step] = myArray[j];
10         myArray[j+step] = base;
11     }
12 }
13 
14 void shellSort(int *myArray, int len)
15 {
16      insertSort(myArray, 5, len);
17      insertSort(myArray, 1, len);
18 }

 

posted @ 2015-07-18 15:55  yoleimei  阅读(195)  评论(0编辑  收藏  举报