希尔排序法又称缩小增量法,是在直接插入排序基础上的一个优化版。
对于直接插入排序在面对一些特殊情况时,效率非常低(例如:将降序排成升序),而对于已经接近排好的序列,效率非常高。
希尔排序在直接排序之前,进行预排列,将某些极端数据更快的排列到数列前面,构成一个接近排列好的序列,最后再进行一次直接插入排序。
预排列的原理也是插入排列,只不过这里的将数组分成了gap组,分别对每一个小组进行插入排序。
如下动图:对于升序,当gap从5 – 2 – 1的过程中,排在后面的数值小的数能更快排到前面,当gap为1的时候实际上就是进行了一次插入排序。