希尔排序(缩小增量排序)面试专题解析
一、算法概述
希尔排序(Shell Sort)是插入排序的一种高效改进版本,由Donald Shell于1959年提出。它通过将原始列表分割成若干子序列进行插入排序,随着增量逐渐减小,最终对整个列表进行一次插入排序。
核心思想:先宏观调整,再微观调整,通过大步长的预处理使数据基本有序,从而提高最后一步普通插入排序的效率。
二、算法特性
时间复杂度分析
- 最坏情况:O(n²)(取决于增量序列的选择)
- 平均情况:O(n log n) 到 O(n^(3/2))
- 最佳情况:O(n log n)
空间复杂度
- O(1):原地排序算法
稳定性
- 不稳定排序:相同元素可能在分组排序时改变相对位置
三、增量序列选择
增量序列(Gap Sequence)的选择直接影响算法效率:
- Shell原始序列:n/2, n/4,..., 1
- Hibbard序列:1, 3, 7,..., 2^k-1
- Sedgewick序列:1, 5, 19, 41,...(混合了2^i*3^j形式)
实践表明:好的增量序列可以使时间复杂度接近O(n^(7/6))