[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 }

posted @ 2011-04-24 20:01  windroc  阅读(218)  评论(0编辑  收藏  举报