软件设计师 · 算法 · 排序复杂度

软件设计师排序算法复杂度怎么记?

排序算法不是背一串 O 符号就完事。考试更爱问“平均还是最坏”“稳定还是不稳定”“为什么这个场景适合这种排序”。只背结论,遇到干扰项很容易被带走。

软件设计师专题 软考题库编辑部 持续更新

先看题目问的是平均、最坏还是稳定性

快速排序最容易被考出陷阱:平均时间复杂度通常是 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),快速排序、归并排序、堆排序的性质并不一样。快速排序平均表现好,但最坏情况要注意;归并排序稳定,但需要额外空间;堆排序空间表现好,但稳定性通常不是优势。

所以题目如果只问平均复杂度,答案可能很直接;如果把“稳定”“外部排序”“最坏情况”加进来,就要按场景重新判断。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。