GESP 四级 · GESP 202512 C++ 四级 第 10 题

选择题 · 答案 B · 考点:算法

← 整套速查表 GESP 四级 全部真题

题目

对如下 $4$ 个扑克牌进行排序,

struct Card {
    int value;
    char suit; // 花色
};

Card cards[4] = {{5,'A'}, {3,'B'}, {5,'C'}, {3,'D'}};

使用某排序算法按value排序后,结果为:{3,'D'}, {3,'B'}, {5,'A'}, {5,'C'},则这个排序算法是稳定的吗?

答案:B

考点

算法

解题思维

答案B。C风格字符串以\0结尾。char str[]="Hello"实际占用6字节(含结尾\0)。\0是字符串结束标志。

常见错误

字符数组的sizeof包含结尾\0,strlen不包含。\0和'0'完全不同!

详细解析(节选)

【考点】排序算法|稳定性

1. 🎯 考纲定位:GESP 四级"算法与数据结构"模块。本考点要求考生能区分稳定排序与不稳定排序,尤其在处理相同关键字时保持原序。命题人用"排序后相同值元素的相对位置"直接考察学生对稳定性的理解,卡住的是把"排好序"误当成"稳定"的普遍误区。

2. 🧠 解题思维:看到排序结果先定位相同 value 的牌。原数组中 3 的牌是 {3,'B'} 在前、{3,'D'} 在后,排序后却变成 {3,'D'} 在前;对比原数组中 3 的牌顺序,发现被反转,说明排序过程中对相等元素进行了交换。稳定排序的定义是"相等元素保持原序",因此该算法不稳定。通法:任何对相等键进行交换的排序(如快速排序、堆排序)都是不稳定的,而冒泡、插入、归并才是稳定。

3. 🪤 陷阱拆解:A 选项错在把"相对位置不变"当成稳定性的充分条件,而本题恰恰相反;B 选项抓住关键点正确;C 选项的"无法判断"是常见思维定势,实际上已知完整输出就能反推算法性质;D 选项把"结果有序"等同于稳定,是概念偷换。最阴险的细节是题干只给了排序后的数组,没有给出原始顺序,但通过对比相同值的先后就能反推。

4. 🔄 反命题思维:若换成稳定的冒泡排序,结果将保持原序,答案变为 A。刷到此类题先问"命题人想考我什么",别被"排好序"蒙蔽。因此正确答案为 B,排序算法不稳定。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断