选择排序算法归结为几个属性:时间复杂度、稳定性、原地内存使用和数据的性质。没有任何一个排序在所有地方都最优。
关键属性
- Stable: 相等元素保持其原始相对顺序(多键排序时需要)。
- In-place: 使用 O(1) 或 O(log n) 额外内存。
- Adaptive: 在几乎排序的输入上速度更快。
| 算法 | 平均时间 | 最坏 | Stable | In-place |
|---|
| Insertion | O(n²) | O(n²) | 是 | 是 |
| Merge | O(n log n) | O(n log n) | 是 | 否 |
| Quick | O(n log n) | O(n²) | 否 | 是 |
| Heap | O(n log n) | O(n log n) | 否 | 是 |
# Most languages ship a tuned hybrid; prefer it in production
sorted(data, key=lambda x: x.priority) # stable Timsort in Python
除非有特定原因,否则不要手动实现排序 — 库函数排序(Timsort、introsort)是经过战斗检验的混合方案。
将排序算法与数据和需求相匹配可避免浪费时间和微妙的 bug(如丢失稳定性)。
理解权衡可以解释为什么标准库选择了 Timsort 和 introsort 这样的混合算法。
这种比较判断力 — 而非死记硬背某个算法 — 才是真实工程和面试所看重的。