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

选择题 · 答案 D · 考点:归并排序

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

题目

下述 C++ 代码实现了归并排序算法,则横线上应填写( )。

void merge(vector<int> &nums, int left, int mid, int right) {
    // 左子数组区间为 [left, mid], 右子数组区间为 [mid+1, right]
    vector<int> tmp(right - left + 1);
    int i = left, j = mid + 1, k = 0;
    while (i <= mid && j <= right) {
        if (nums[i] <= nums[j])
            tmp[k++] = nums[i++];
        else
            tmp[k++] = nums[j++];
    }
    while (i <= mid) {
        tmp[k++] = nums[i++];
    }
    while (________) {  // 在此处填入代码
        tmp[k++] = nums[j++];
    }
    for (k = 0; k < tmp.size(); k++) {
        nums[left + k] = tmp[k];
    }
}

void mergeSort(vector<int> &nums, int left, int right) {
    if (left >= right)
        return;

    int mid = (left + right) / 2;
    mergeSort(nums, left, mid);
    mergeSort(nums, mid + 1, right);
    merge(nums, left, mid, right);
}
答案:D

考点

归并排序

解题思维

根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。

常见错误

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

详细解析(节选)

【考点】归并排序|合并过程逻辑|剩余元素处理

1. 🎯 考纲定位

GESP 五级「算法与数据结构」模块,核心考察归并排序中 merge 函数的边界控制。命题人专门卡住"合并时剩余元素处理"这个多数考生会忽略的细节——绝大多数人只盯着主循环,对退出后哪个子数组可能剩下元素毫无概念。

同考点真题

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