算法思路:
先按步长为长度一半分组,对各组进行排序;
然后缩小一半的步长继续分组排序;
直至最后步长为1时,整个数组就排好序了。
第一轮排序完,原数组更有序了
代码:
稳定性:
比如,第一轮,第3、4组的2前后交换了位置。因此不稳定。
时间复杂度:
希尔排序的运行时间依赖于增量序列的选择
使用希尔增量:1,2,4,8…,希尔排序的最坏情形运行时间为O(n^2);
Hibbard增量序列:1,3,7,…,2k-1;最坏情形运行时间为 O(n^1.5);
Sedgewick增量序列:1,5,19,41,109,…,其最坏情形运行时间为 。其中最好的是序列O(n^4/3);
平均情况为 O(n^1.5)。
空间复杂度:
由于辅助内存很少,故空间复杂度为O(1)。
讲解视频:
https://www.bilibili.com/video/BV1Ca411i7NX/