希尔排序算法图解:要点及过程

2018-09-2709:53:14数据结构与算法Comments12,355 views1字数 1293阅读模式

希尔排序

希尔排序是希尔(Donald Shell)提出的一种排序方法,也属于插入排序,但是简单插入排序的高效版本,也称为缩小增量排序。基本思想是将待排序元素进行增量分组,然后在分组组内进行插入排序,随着增量的减少,每个分组组内的元素越来越多,直至增量减至1时,所有元素都分到同一个组内,执行插入排序后完成整个排序操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

排序要点

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

希尔排序过程中一般可以初次取所有元素数量的一半为增量,以后每次减半,直到增量为1。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

排序过程

假设我们有如下7个元素,分别为84, 25, 59, 71, 62, 16, 34,现在进行希尔排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

第一轮选取所有元素数量的一半作为增量,即7/2,取3,所以第一轮增量为3,那么第一组分组就是索引为0,3,6对应的元素,即84,71,34,对其进行插入排序操作,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

把84当做已排序序列,接着准备将组内第二个元素71插入到已排序序列中,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

71小于84,所以84后移到71原来的位置,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

接着将组内第三个元素34插入到已排序序列中,首先与84比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

34小于84,所以84后移,然后继续与71比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

34小于71,所以71后移,34放进去。然后开始处理第二组分组,第二组分组就是索引为1,4对应的元素,即25,62,对其进行插入排序操作,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

把25当做已排序序列,接着将组内第二个元素62插入到已排序序列中,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

25小于62,所以不移动。然后开始处理第三组分组,第三组分组就是索引为2,5对应的元素,即59,16,对其进行插入排序操作,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

把59当做已排序序列,接着将组内第二个元素16插入到已排序序列中,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

16小于59,所以59后移而16前移。至此处理完增量为3的情况。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

第二轮增量为上一轮增量的二分之一,即3/2,取1,所以第二轮增量为1,此时所有元素组成同一个分组,对该组进行插入排序操作,首先将34当成已排序序列,准备将25插入到已排序序列,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

25小于34,于是34后移,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

继续将下一个元素插入已排序序列中,16与34比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

16小于34,于是34右移,接着16与25比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

16小于25,25后移,16放进对应位置,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

继续将下一个元素插入已排序序列中,71与34比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

34小于71,不移动,71放回原来位置,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

继续将下一个元素插入已排序序列中,62与71比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

62小于71,于是71后移,接着62与34比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

34小于62,不移动,62放到对应位置,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

继续将下一个元素插入已排序序列中,59与71比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

59小于71,于是71后移,然后继续与62比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

59小于62,于是62也后移,然后继续与34比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

34小于59,于是34不移动,59放到对应位置,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

继续将下一个元素插入已排序序列中,已经是最后一个元素了,84与71比较,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

71小于84,所以不移动,此时已完成所有元素的希尔排序操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

希尔排序算法图解:要点及过程

作者:超人汪小建
来源:掘金文章源自菜鸟学院-https://www.cainiaoxueyuan.com/suanfa/5863.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/suanfa/5863.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定