GESP 五级 · GESP 202603 C++ 五级 第 12 题

选择题 · 答案 B · 考点:归并排序、双指针

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

题目

游戏大赛决赛,两组选手分别按得分从小到大排好队,现在要把他们合并成一个有序排行榜。

A 组: $A = \{12, 35, 67, 89\}$ , B 组: $B = \{20, 45, 55, 78\}$ ,下面是归并合并函数的核心循环,横线处应填入( )。

int i = 0, j = 0;
vector<int> result;

while (i < A.size() && j < B.size()) {
    if (_____________) {
        result.push_back(A[i++]);
    } else {
        result.push_back(B[j++]);
    }
}

while (i < A.size()) {
    result.push_back(A[i++]);
}

while (j < B.size()) {
    result.push_back(B[j++]);
}
答案:B

考点

归并排序双指针

解题思维

STL 容器:vector(动态数组)、set/map(红黑树,有序)、unordered_set/map(哈希表,无序)。注意迭代器失效问题。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

【考点】归并排序思想|双指针技巧|条件判断逻辑

GESP 五级算法模块核心。命题人专挑"有序数组合并"考学生是否理解"归并"本质——不是比索引,而是比值。

两个已排序数组,要合并成有序,只能每次取当前两端较小者。这就是归并排序 merge 阶段的标准写法:while 循环不断从 A 或 B 头取最小值入 result,最后把剩余元素追加。

A 选项 A[i]>=B[j] 会取较大值,直接破坏有序;C、D 选项比索引 i/j,但题目要求比较的是数组元素值。若只背"双指针"而不理解"比较对象",必选错。这是典型的偷换概念陷阱——指针移动条件必须关联数值大小,而非下标关系。

若改成降序合并,条件应反转为 A[i]>=B[j]。刷到合并题先问:要保留什么顺序?对比什么?

同考点真题

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