希尔排序

希尔排序(shell) 

 

希尔排序是不稳定的

 

主要思想借用了合并排序的思想。不过他不是左边一半右边一半,而是按照步长来分,随着步长减少,分成的组也越少。然后进行各组的插入排序

换句话说,就是按照步长从大到小最后到1的过程,为每次循环都做插入排序。比如按步长为8设置分组,对各个分组进行插入排序,再按步长为4设置分组,对各个分组进行插入排序,再按步长为2设置分组,对各个分组进行插入排序,最后按步长为1分组并插入排序(此时就是最原始的插入排序,但是由于每一次分组并对各个分组的排序时都使用到了上一次排序的过程结果,因此是对插入排序的优化)。

Shell排序的时间性能优于直接插入排序 !

 

举个百度上的例子:

排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止

  初始:d=5

  49 38 65 97 76 13 27 49* 55 04

  49 13 —————由于第一个数大于第1+5个数,于是对这个分组插入排序,得到13,49的序列,也就是交换两者!

  |-------------------|

  38 27

  |-------------------|

  65 49*

  |-------------------|

  97 55

  |-------------------|

  76 04

  |-------------------|

  一趟结果

  13 27 49* 55 04 49 38 65 97 76

 

  d=3

  13 27 49* 55 04 49 38 65 97 76

  13 55 38 76 ——————————按步长为3得到第一个分组13 55 38 76,插入排序后得到13 38 55 76,于是将排好的序列放入原来的四个位置上

  |------------|------------|------------|

  27 04 65

  |------------|------------|

  49* 49 97

  |------------|------------|

  二趟结果

  13 04 49* 38 27 49 55 65 97 76

 

  d=1 ————————————————最后使用步长为1的分组,也就是最原始的插入排序,在原来的基础上基本有序,因此效率很高。

  13 04 49* 38 27 49 55 65 97 76

  |----|----|----|----|----|----|----|----|----|

  三趟结果

  04 13 27 38 49* 49 55 65 76 97

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值