先看题目问的是平均、最坏还是稳定性
快速排序最容易被考出陷阱:平均时间复杂度通常是 O(n log n),但最坏情况下可能退化为 O(n²)。如果题干明确写“平均情况下”,就不要因为记住了最坏情况而选错。
归并排序的考法通常更平稳:时间复杂度一般是 O(n log n),并且通常可以做到稳定。代价是需要额外空间。考试如果问稳定性,归并排序常常比快速排序更友好。
| 算法 | 常见平均复杂度 | 容易考的点 |
|---|---|---|
| 快速排序 | O(n log n) | 平均快,最坏可能 O(n²),通常不稳定 |
| 归并排序 | O(n log n) | 稳定,但需要额外空间 |
| 冒泡排序 | O(n²) | 基础排序,适合考概念不适合大数据 |
| 堆排序 | O(n log n) | 不稳定,和堆结构有关 |
稳定性到底在问什么
稳定排序不是说算法运行很稳定,而是说相等关键字的元素排序后相对顺序不变。比如两个学生分数都是 90,原来 A 在 B 前面,排序后仍然 A 在 B 前面,就叫稳定。
这个点在选择题里很爱混淆。看到“相同关键字”“相对次序不变”这类词,就要想到稳定性,而不是想到时间复杂度。
稳定相等关键字排序后相对顺序不变
不稳定相等关键字排序后相对顺序可能改变
复杂度衡量随数据规模增长的时间或空间消耗
考场上不要把所有 O(n log n) 看成一样
同样是 O(n log n),快速排序、归并排序、堆排序的性质并不一样。快速排序平均表现好,但最坏情况要注意;归并排序稳定,但需要额外空间;堆排序空间表现好,但稳定性通常不是优势。
所以题目如果只问平均复杂度,答案可能很直接;如果把“稳定”“外部排序”“最坏情况”加进来,就要按场景重新判断。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- 快速排序的平均时间复杂度是多少?快速排序 / 时间复杂度
- 归并排序为什么通常被认为是稳定排序?排序算法 / 归并排序
- 栈和队列的主要区别是什么?数据结构 / 栈