选择排序算法归结为几个属性:时间复杂度、稳定性、原地内存使用和数据的性质。没有任何一个排序在所有地方都最优。
关键属性
- Stable: 相等元素保持其原始相对顺序(多键排序时需要)。
- In-place: 使用 O(1) 或 O(log n) 额外内存。
- Adaptive: 在几乎排序的输入上速度更快。
对比
指导
- 小数据/几乎排序 -> insertion sort。
- 需要稳定性或保证 O(n log n) -> merge sort。
- 通用快速内存排序,平均速度很重要 -> quicksort (randomized pivot)。
- 保证界限 + 内存紧凑 -> heap sort。
python
# 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 这样的混合算法。
这种比较判断力 — 而非死记硬背某个算法 — 才是真实工程和面试所看重的。
