GESP C++ 真题 · 逐题精解
首页C++五级真题 › 2026年6月 › 第4题

GESP 2026年6月 C++五级 判断题 第4题

C++五级判断题2026年6月第4题

所属知识点:查找与二分 难度要求:掌握 考频:—

在归并排序的合并操作中,如下代码片段可以正确地将两个已排序的子数组 L 和 R 合并回原数组 arr 中。
void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1, 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++];
}

正确答案:正确(√)

题目解析
代码先把左右两段拷到临时数组 L、R,再用双指针按从小到大依次取较小者放回 arr,最后把剩余元素补齐——这是标准且正确的归并过程,说法正确,选 √。💡 合并两个有序段是归并排序的核心,双指针 + 收尾循环缺一不可。

想系统刷完 GESP C++ 1~8 级真题,并查看每道题的逐题精讲?

进入 GESPPASS 开始练习