希尔排序 也称做递减增量排序算法,1959年Shell发明,是插入排序的一种高速而稳定的改进版本
希尔排序是先将整个待排序的记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,在对全体记录进行依次直接排序

例如上图中的待排序数组:[49,38,65,97,76,13,27,49,55,4]
5个间隔为一组划分成5组子序列,每个子序列进行插入排序后,各个子序列就变成了有序的了(整体不一定有序)2个间隔为一组划分成3组子序列,各个子序列进行插入排序上面提到的间隔可以称作增量, 一般初始增量取数组的一半长度, 每轮排序后,增量减半,直至增量为1(存在多种增量序列)
如下图,其中H表示增量

1 |
|
希尔排序的复杂度与增量有关,不同的增量会产生不同的复杂度
像我们思路分析中的数组对半取值为增量5,直至为1,其实并不是最优增量序列。
| 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 |
|---|---|---|---|
| O(n^1.25) | O(n) | O(n²) | O(1) |
希尔排序时直接插入排序的优化版,解决了直接插入排序在面对大量数据时的效率低问题。
希尔排序适用于大规模无序数组的排序,且相对于直接插入排序数组越大优势越大
希尔排序 也称做递减增量排序算法,1959年Shell发明,是插入排序的一种高速而稳定的改进版本
希尔排序是先将整个待排序的记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,在对全体记录进行依次直接排序

例如上图中的待排序数组:[49,38,65,97,76,13,27,49,55,4]
5个间隔为一组划分成5组子序列,每个子序列进行插入排序后,各个子序列就变成了有序的了(整体不一定有序)2个间隔为一组划分成3组子序列,各个子序列进行插入排序上面提到的间隔可以称作增量, 一般初始增量取数组的一半长度, 每轮排序后,增量减半,直至增量为1(存在多种增量序列)
如下图,其中H表示增量

1 |
|
希尔排序的复杂度与增量有关,不同的增量会产生不同的复杂度
像我们思路分析中的数组对半取值为增量5,直至为1,其实并不是最优增量序列。
| 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 |
|---|---|---|---|
| O(n^1.25) | O(n) | O(n²) | O(1) |
希尔排序时直接插入排序的优化版,解决了直接插入排序在面对大量数据时的效率低问题。
希尔排序适用于大规模无序数组的排序,且相对于直接插入排序数组越大优势越大