Appearance
题目
现有 名学生的成绩记录,每位学生的记录包含两门课程的成绩:课程 1(记为 )和课程 2(记为 )。
排序规则如下:
- 首先,依据 成绩升序排列;
- 若两名学生的 成绩相同,则依据其总分(即 )升序排列。
请从下列排序算法中,选择最适合实现上述需求的算法()。
错因
B
把"快排适用于一切排序"当万能膏药,没注意到快排是不稳定的——当 相同时,快排打乱原有 顺序,无法天然保证总分升序。要在快排里实现,必须自定义复合比较函数(先比 ,再比总分),但题目问的是"最适合",而专门处理多关键字的算法是基数排序。
C
希尔排序是直接插入的"分组+变增量"优化版,本质上仍是单关键字、不稳定的排序,不天然支持多关键字。同样需要自定义比较函数,且因不稳定无法只对副关键字排一遍就靠稳定性递推。
D
选择排序也是单关键字、不稳定的算法(每趟选最小往前换位会破坏相同 间的相对顺序)。同样不是"多关键字排序"的代表。
总解析
多关键字排序的标准做法:基数排序(LSD,Least Significant Digit 最低位优先)。
具体到本题,主关键字是 、次关键字是总分 ,按 LSD 思路实现:
- 第一趟:以"总分"为关键字,对所有记录做稳定排序;
- 第二趟:以""为关键字,对上一趟结果再做稳定排序。
为什么这样得到的结果正确:第二趟按 排,稳定性保证当 相同时,原有的相对顺序不变——而原有顺序正是第一趟排好的总分升序。两遍稳定排序合起来恰好满足"主关键字 升序、 相同时总分升序"。
其他三个算法的问题:
| 算法 | 是否稳定 | 是否原生支持多关键字 |
|---|---|---|
| 基数排序 | ✓ 稳定 | ✓ LSD 思想 |
| 快速排序 | ✗ 不稳定 | ✗ 单关键字 |
| 希尔排序 | ✗ 不稳定 | ✗ 单关键字 |
| 选择排序 | ✗ 不稳定 | ✗ 单关键字 |
虽然 B/C/D 通过改写比较函数也能完成任务,但题目问的是**"最适合"**——基数排序是教材里专为多关键字排序设计的算法。
最终答案是 A。