希尔排序
原理
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
如果看不懂上面的原理也没有关系,我们还有动图供大家理解
这里我们可以看到
- 第一遍的时候我们的增量为5
- 第二遍的时候我们的增量为2
- 第三遍的时候我们的增量为1
这时候肯定有小伙伴在想增量是什么
增量(也被称为步长):这个是我们自己决定的一个变量,我们通过这个增量来给我们的元素分组,步长尽量与元素数是整数倍的关系,方便我们分组。
分组的关键其实就在我们的步长上面,我们分组就是依据步长,比如第一个元素走过n(步长)步的时候我们就将第一个元素与这个元素分成一组,之后再走n步,这个元素也与我们的第一个元素分成一组,直到我们走到最后一个。
而我们边走边进行插入排序。
所以,希尔排序也是一种插入排序。