标签:
一 希尔排序
希尔排序是优化的直接插入排序,直接插入排序可以看做是增量为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 }
标签:
原文地址:http://www.cnblogs.com/yoleimei/p/4657083.html