14-看图理解数据结构与算法系列(希尔排序)

Posted knight-of-dulcinea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14-看图理解数据结构与算法系列(希尔排序)相关的知识,希望对你有一定的参考价值。

希尔排序

希尔排序是希尔(Donald Shell)提出的一种排序方法,也属于插入排序,但是简单插入排序的高效版本,也称为缩小增量排序。基本思想是将待排序元素进行增量分组,然后在分组组内进行插入排序,随着增量的减少,每个分组组内的元素越来越多,直至增量减至1时,所有元素都分到同一个组内,执行插入排序后完成整个排序操作。

排序要点

  1. 选取一个小于所有待排序元素数量n的整数技术分享图片作为第一个增量,对全部元素进行分组,分组的依据是所有距离为技术分享图片的倍数的记录分到同一组。
  2. 对分好的组,在组内进行直接插入排序。
  3. 接着取第二个增量技术分享图片,其中技术分享图片<技术分享图片,然后根据新的增量继续分组并在组内进行直接插入排序。
  4. 重复第3步直到增量等于1,即所有记录都在同一分组中,再进行直接插入排序,完成排序。

希尔排序过程中一般可以初次取所有元素数量的一半为增量,以后每次减半,直到增量为1。

排序过程

假设我们有如下7个元素,分别为84, 25, 59, 71, 62, 16, 34,现在进行希尔排序。

 

技术分享图片

 

第一轮选取所有元素数量的一半作为增量,即7/2,取3,所以第一轮增量为3,那么第一组分组就是索引为0,3,6对应的元素,即84,71,34,对其进行插入排序操作,

 

技术分享图片

 

把84当做已排序序列,接着准备将组内第二个元素71插入到已排序序列中,

 

技术分享图片

 

71小于84,所以84后移到71原来的位置,

 

技术分享图片

 

接着将组内第三个元素34插入到已排序序列中,首先与84比较,

 

技术分享图片

 

34小于84,所以84后移,然后继续与71比较,

 

技术分享图片

 

34小于71,所以71后移,34放进去。然后开始处理第二组分组,第二组分组就是索引为1,4对应的元素,即25,62,对其进行插入排序操作,

 

技术分享图片

 

把25当做已排序序列,接着将组内第二个元素62插入到已排序序列中,

 

技术分享图片

 

25小于62,所以不移动。然后开始处理第三组分组,第三组分组就是索引为2,5对应的元素,即59,16,对其进行插入排序操作,

 

技术分享图片

 

把59当做已排序序列,接着将组内第二个元素16插入到已排序序列中,

 

技术分享图片

 

16小于59,所以59后移而16前移。至此处理完增量为3的情况。

 

技术分享图片

 

第二轮增量为上一轮增量的二分之一,即3/2,取1,所以第二轮增量为1,此时所有元素组成同一个分组,对该组进行插入排序操作,首先将34当成已排序序列,准备将25插入到已排序序列,

 

技术分享图片

 

25小于34,于是34后移,

 

技术分享图片

 

继续将下一个元素插入已排序序列中,16与34比较,

 

技术分享图片

 

16小于34,于是34右移,接着16与25比较,

 

技术分享图片

 

16小于25,25后移,16放进对应位置,

 

技术分享图片

 

继续将下一个元素插入已排序序列中,71与34比较,

 

技术分享图片

 

34小于71,不移动,71放回原来位置,

 

技术分享图片

 

继续将下一个元素插入已排序序列中,62与71比较,

 

技术分享图片

 

62小于71,于是71后移,接着62与34比较,

 

技术分享图片

 

34小于62,不移动,62放到对应位置,

 

技术分享图片

 

继续将下一个元素插入已排序序列中,59与71比较,

 

技术分享图片

 

59小于71,于是71后移,然后继续与62比较,

 

技术分享图片

 

59小于62,于是62也后移,然后继续与34比较,

 

技术分享图片

 

34小于59,于是34不移动,59放到对应位置,

 

技术分享图片

 

继续将下一个元素插入已排序序列中,已经是最后一个元素了,84与71比较,

 

技术分享图片

 

71小于84,所以不移动,此时已完成所有元素的希尔排序操作。

 

技术分享图片

作者:超人汪小建
链接:https://juejin.im/post/5bac2575f265da0a8a6ab216
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




以上是关于14-看图理解数据结构与算法系列(希尔排序)的主要内容,如果未能解决你的问题,请参考以下文章

15-看图理解数据结构与算法系列(合并排序)

看图轻松理解数据结构与算法系列(二叉搜索树)

看图轻松理桶排序

经典排序算法系列之插入排序和希尔排序----小白理解(python)

五分钟学会一个高难度算法:希尔排序

JavaScript 数据结构与算法之美 - 归并排序快速排序希尔排序堆排序