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

转载于:https://www.cnblogs.com/windroc/archive/2011/04/24/2026418.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值