| 上一篇 | 下一篇 |
|---|---|
| 希尔排序 |
5)四种排序算法比较
| 排序算法 | 时间复杂度(最好 / 平均 / 最坏) | 空间复杂度 | 稳定性 | 原地排序 | 优点 | 缺点 | 典型使用场景 |
|---|---|---|---|---|---|---|---|
| 冒泡排序 | O(n) / O(n²) / O(n²) | O(1) | 稳定 | 是 | 实现极其简单,逻辑直观;对几乎有序数据效率较高 | 效率低,大量冗余交换;大数据下性能极差 | 教学演示;极小规模数据(n < 20);调试用途 |
| 选择排序 | O(n²) / O(n²) / O(n²) | O(1) | 不稳定 | 是 | 交换次数少(最多 n−1 次);实现简单 | 比较次数固定且多;无法利用数据有序性优化 | 内存写入成本高(如 Flash)的场景;教学 |
| 快速排序 | O(n log n) / O(n log n) / O(n²) | O(log n)(平均) | 不稳定 | 是 | 平均性能极佳;缓存友好;实际应用最快之一 | 最坏情况退化严重(如已排序);递归可能栈溢出 | 通用高性能排序(如 std::sort 底层);大数据量内存排序 |
| 希尔排序 | O(n log n) / O(n^1.3~1.5) / O(n²) | O(1) | 不稳定 | 是 | 比 O(n²) 算法快很多;代码简洁;无需递归 | 性能依赖 gap 序列;不稳定;理论分析复杂 | 中等规模数据(n ≈ 1,000~10,000);嵌入式系统;作为 fallback 排序 |
说明:
- 稳定性:指相等元素排序后相对位置不变,冒泡是唯一稳定的 O(n²) 算法。
- 快速排序最坏情况可通过随机化 pivot 或三数取中避免。
- 希尔排序的平均性能优于冒泡/选择/插入,但不如快排、归并。
- 在现代库中(如 C++
std::sort、PythonTimsort),快速排序或其变种是主力,而 O(n²) 算法仅用于极小数组的优化分支。