希尔排序
希尔排序是插入排序的一种高效的改进版,并且效率比插入排序要更快,因为它突破了时间复杂度为O(n^2的限制)。由于希尔排序是基于插入排序的,所以有必要回顾一下插入排序:
插入排序的问题:
1,假设一个很小的数据项在很靠近右端的位置上,这里本来应该是较大的数据项的位置。
2,把这个小数据项移动到左边的正确位置,那么所有的中间数据项都必须向右移动一位。
3,因此我们通常认为插入排序的时间复杂度为O(n^2)。
4,如果有某种方式,不需要一个个移动所有中间的数据项,就能把较小的数据项移动到左边,那么这个算法的执行效率就会有很大的改进。
希尔排序的思路:
以下图为例。
1,我们先让间隔为5的数字进行一个比较并进行排序,那么排序后的新序列,一定可以让每个数字距离自己的正确位置更近一步。
2,紧接着我们再让间隔为3的数字进行一个比较并进行排序,那么排序后的新序列,一定可以让每个数字距离自己的正确位置又更近一步。
3,最后,我们再让间隔为1的数字进行,也就是正确的插入排序了。
但是这里有一个问题就是如何去选择我们的一个间隔呢也就