希尔排序
前言
说到希尔排序,就不得不说到插入排序,插入排序有一个缺点,那就是对于有序性高的序数列,排序效果好,也就是速度快,但对于无序性高的数列来说,插入排序的速度就会很慢。为什么呢?因为,每次从无序数列中向有序数列插入时,都要依次从后往前和有序数列中的每一个数比较这样的话,效率就比较低。这也就解释了为什么,对于有序性高的竖列,排序速度就会快一些。但实际情况中,不是说你想怎么样就怎么样的,于是就有了希尔排序,可以把它看做插入排序的优化升级版。
排序步骤
- 将一个数列分为以gap为步长的若干段,gap是数列长度的一半,这时每一段都含有gap个数字
- 再将每一段的第一个数字拿出来进行插入排序,排好序后再从小到大依次放回每段第一个,再把每一段的第二个数拿出来排序,再放回去,一直到每一段的第gap个,排好序后放回去。
- 然后步长除以2,得到新的gap,重复上面的步骤
- 直到gap为1停止,通过一顿操作,使得数列的的有序性提高
- 最后再对数列进行插入排序
- 希尔排序其实就是白数列变得更适合插入排序后,再进行插入排序
补充说明
-
我找的这个图比较巧合,刚好到最后一趟就排好序了,但一般情况下,还要再