对一组 struct student 的学生按成绩(score )升序排序。排序前后的数据如下。关于该排序的稳定 性,判断正确的是( )。
struct student {
int score;
char id;
};排序前:
(90, 'A'), (80, 'B'), (90, 'C'), (80, 'D')排序后:
(80, 'B'), (80, 'D'), (90, 'C'), (90, 'A')看输入输出序列,定位相同键值元素,对比相对位置是否改变。
把"稳定"当成"已排好序"或"同分不影响结果",误以为必须看算法代码才能判断。
GESP 四级《算法与数据结构》模块,排序算法基础考点。命题人卡住的是考生对"稳定性"概念的认知偏差——很多人把"稳定"和"已排好序"混为一谈,或者认为只有看到代码才能判断。
定义先行:排序算法稳定,指键值相同的元素,排序后相对顺序不变。
定位关键元素:输入中两个 90 分记录是 (90, 'A') 和 (90, 'C'),'A' 在前。
对比输出:输出中这两个记录变成 (90, 'C') 在前、(90, 'A') 在后,相对顺序翻转了。
结论:稳定性被破坏,排序不稳定。
通法:遇到稳定性判断,先找所有键值相同的元素,看它们在输出中的相对顺序是否保持原样。