GESP 五级 · GESP 202606 C++ 五级 第 19 题

判断题 · 答案 A · 考点:归并排序、分治算法

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

题目

在归并排序的合并操作中,如下代码片段可以正确地将两个已排序的子数组 L 和 R 合并回原数组 arr 中。

void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;
    vector<int> L(n1), R(n2);
    for (int i = 0; i < n1; i++) L[i] = arr[left + i];
    for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j];
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) arr[k++] = L[i++];
        else arr[k++] = R[j++];
    }
    while (i < n1) arr[k++] = L[i++];
    while (j < n2) arr[k++] = R[j++];
}
答案:A

考点

归并排序分治算法

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】归并排序|分治算法|数组索引边界

1. 🎯 考纲定位

GESP 五级《算法》模块核心考点,命题人专卡"分治实现细节"——五级考生常会背"归并排序=分治",却栽在合并时子数组起始位置计算错误,这道题就是来验收你是否真懂代码而非只懂概念。

同考点真题

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