【数据结构】排序----希尔排序

希尔排序的特性

利用插入排序的简单,同时克服插入排序每次只交换相邻两个元素的缺点

 

栗子:对下面序列排序

                81 94 11 96 12 35 17 95 28 58 41 75 15 

5间隔:   每隔5个,对其子序列做插入排序

                81 94 11 96 12 35 17 95 28 58 41 75 15 

                35 94 11 96 12 41 17 95 28 58 81 75 15

                5间隔排序后:

                35 17 11 28 12 41 75 15 96 58 81 94 95 

3间隔:   28 12 11 35 15 41 58 17 94 75 81 96 95 

1间隔:   11 12 15 17 28 35 41 58 75 81 94 95 96 

 

3 间隔有序序列还保持了 5间隔有序的性质(更小间隔没有把上一个间隔变坏)

 

定义增量序列DM >DM-1 >...>D1 =1

对每个 Dk进行“Dk-间隔”排序( k = M, M-1, ... 1 )

注意:“Dk-间隔”有序的序列,在执行“Dk-1-间隔”排序后,仍然是“Dk- 间隔”有序的

 

原始希尔排序

每次减半

DM = [ N / 2 ]   Dk = [ Dk+1 / 2 ]

时间复杂度

最坏情况  T = φ(N²) 

 

希尔排序的坏的栗子:

             1 9 2 10 3 11 4 12 5 13 6 14 7 15 8 16

8间隔:1 9 2 10 3 11 4 12 5 13 6 14 7 15 8 16

4间隔:1 9 2 10 3 11 4 12 5 13 6 14 7 15 8 16

2间隔:12 10 3 11 4 12 5 13 6 14 7 15 8 16

1间隔:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 

shellsort.py

以上例子说明:

增量元素不互质,则小增量可能根本不起作用

互质:元素没有公因子

  • 8,10的最大公因数是2,不是1,因此不是整数互质。
  • 7,11,13的最大公因数是1,因此这是整数互质。
  • 5和5不互质,因为5和5的公因数有1、5

 

 

更多的增量序列

hibbard 增量序列

sedgewick增量序列

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值