介绍
分析
基本思想:
1 | 将需要排序的序列划分为若干个较小的序列,对这些序列进行直接插入排序,通过这样的操作可使需要排序的数列基本有序,最后再使用一次直接插入排序对整个数列进行排序 |
算法描述:
- 首先使用元素数量的一半作为增量,划分为n/2个子序列,分别对这些子序列分别进行插入排序
- 再原有增量基础上,缩小一般,划分为n/4个子序列,分别对这些子序列分别进行插入排序
- 重复上述步骤,知道n/4>=1,对整个序列进行插入排序
C实现
1 | /** |
Swift实现
1 | class ShellSort { |
总结
时间复杂度:
- 最差O(n^2)
- 最优O(n)
- 平均O(n^1.3)
空间复杂度:
- O(1)
稳定性:
- 不稳定