[Algorithms][Chap2]希尔排序
http://sjjp.tjuci.edu.cn/sjjg/datastructure/ds/web/paixu/paixu8.2.2.1.htm
http://zh.wikipedia.org/wiki/希尔排序
已知的最好步长序列由Marcin Ciura设计(1,4,10,23,57,132,301,701,1750,…)。
希尔排序的一个简单算法:
1 // 希尔排序
2 template<typename T>
3 bool shell_sort(std::vector<T> & A )
4 {
5 int increment = A.size() / 2 ;
6 while(increment>=1)
7 {
8 shell_pass(A , increment);
9 if(increment==2)
10 increment = 1;
11 else
12 increment = increment/2.2;
13 }
14 return true;
15 }
16
17 // 一趟排序
18 template<typename T>
19 bool shell_pass(std::vector<T> & A , int increment)
20 {
21 for(int j = increment; j < A.size(); j+=increment)
22 {
23 T key = A[j];
24 int i = j - increment;
25 while(i >= 0 && A[i] > key) // < 非升序排列 , > 非降序排列
26 {
27 A[i+1] = A[i];
28 i -= increment;
29 }
30 A[i + increment] = key;
31 }
32 return true;
33
34
35 return true;
36 }