大家好,我是「阑梦清川」
今天看一下2026考研数据结构部分最后一个选择题啦:

这道题目考察的可能是排序算法的特性,特别是处理「多级排序」时的效率问题。
题目要求对 N 名学生的成绩进行两级排序:
- 第二关键词:若 C1 相同,则按照总分(C1 + C2)进行升序排序
这实际上是一个典型的多键值排序问题。在处理多级排序时,有两个非常关键的核心特性:「稳定性」(Stability)和基数排序。
稳定性说的就是,如果两个元素在排序前具有相等的键值,排序后它们的相对次序保持不变。
「基数排序」的核心思想就是利用这种稳定性,它会先按照低优先级的键排序,再按照高优先级的键排序。
为什么选择基数排序?我们可以把这个题目的要求看作是对一个两位数进行排序:
如果我们要用基数排序的思路来解决,你应该先按照哪一个标准进行第一轮排序,才能保证在「第二轮排序」后,结果完全符合题目的要求呢?
显然是「选项二」。
因为在实际的算法实现中,结果往往和直觉相反。为了理解为什么,我们需要关注「稳定性」:如果一个排序算法是稳定的,当它处理第二轮排序时,会保留第一轮排序留下的相对先后顺序。
让我们使用一个小例子来推演一下。
假设有两名学生:
按照题目的规则,小红应该排在前面。如果我们按照“选项 1”先比较 C1 再比较总分的操作:
- 第一步按 C1 排序:两个人的分数相同,位置可能不变。
- 第二步按总分排序:算法看到小红的总分比较低,把小红排在前面。
这看起来成功了,但如果此时有第三个学生小刚,他的 C1 = 70分。在第二步按总分排序时,如果小刚的总分很高(比如 190 分),他就会被排到最后面。这样就破坏了第一步好不容易排好的 C1 顺序,因为小刚本该因为 C1 较低而排在最前面。
「基数排序」采用的是从低位到高位的策略。如果我们想让最终成绩以 C1 为主、总分为辅,我们应该先按总分排序,再按 C1 排序。这就是利用基数排序的稳定性:
- 再按照 C1 排序:
(a) 如果两个学生 C1 不同,高优先级的 C1 决定了他们的先后。
(b) 如果两个学生 C1 相同,稳定的排序算法会保留他们在第一步(即总分排序)中的相对顺序。
因为第一步已经让总分低的人在前面,总分高的人在后面,所以当 C1 相同的时候,「总分低的人」自然就会留在前面。
因此,「基数排序」最适合这种多级关键词且关键词范围较小的情况。相比之下,快速排序、希尔排序和选择排序通常是不稳定的,或者在处理多级排序时效率不如基数排序。所以这个题目正确的答案应该选择基数排序。
我是「阑梦清川」,希望得到您的关注