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

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

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

题目

在对长度为 $n$($n\ge 1$)的数组进行归并排序的过程中,mergeArray 函数(合并两个有序子数组的操作)被调用的次数是( )。

const int MAXN = 100005;
int a[MAXN];
int tempArr[MAXN];
void mergeArray(int left, int mid, int right) {
    int i = left;     // 左半部分起点
    int j = mid + 1; // 右半部分起点
    int k = left;     // 临时数组下标
    while (i <= mid && j <= right) {
        if (a[i] <= a[j]) {
            tempArr[k++] = a[i++];
        } else {
            tempArr[k++] = a[j++];
        }
    }
    while (i <= mid) {
        tempArr[k++] = a[i++];
    }
    while (j <= right) {
        tempArr[k++] = a[j++];
    }
    for (int p = left; p <= right; p++) {
        a[p] = tempArr[p];
    }
}
void mergeSort(int left, int right) {
    if (left >= right) {
        return;
    }
    int mid = left + (right - left) / 2;
    mergeSort(left, mid);
    mergeSort(mid + 1, right);
    mergeArray(left, mid, right);
}
答案:A

考点

归并排序

解题思维

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

常见错误

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

详细解析(节选)

【考点】递归结构分析|二叉树节点计数|归并排序

1. 🎯 考纲定位

本题落在 GESP 五级"算法专题——排序"模块,核心考察归并排序的递归结构。命题人刻意不考时间复杂度(nlogn 是常识),而是挖"mergeArray 调用次数"这个细节——这卡住的是那些只背结论、不理解递归展开过程的考生。

同考点真题

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