You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

归并排序(MergeSort)实现问题:合并后无法输出完整数组

解决方案

问题出在你的printArray函数仅打印合并的子数组,而题目要求输出完整数组并标注合并区间。以下是修改后的代码,核心调整是新增打印完整数组并高亮合并区间的函数,同时传递数组长度到合并流程中:

#include <iostream>

using namespace std;

// 打印完整数组,合并区间[mergeLeft, mergeRight]用[]标注
void printFullArrayWithMerge(int arr[], int n, int mergeLeft, int mergeRight) {
    for (int i = 0; i < n; ++i) {
        // 到达合并区间起始位置,输出左括号
        if (i == mergeLeft) {
            cout << "[ ";
        }
        cout << arr[i];
        // 非最后一个元素输出空格分隔
        if (i < n - 1) {
            cout << " ";
        }
        // 到达合并区间结束位置,输出右括号
        if (i == mergeRight) {
            cout << " ]";
        }
    }
    cout << endl;
}

void merge(int arr[], int left, int mid, int right, int n) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    int* L = new int[n1];
    int* R = new int[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];
            ++i;
        } else {
            arr[k] = R[j];
            ++j;
        }
        ++k;
    }

    while (i < n1) {
        arr[k] = L[i];
        ++i;
        ++k;
    }

    while (j < n2) {
        arr[k] = R[j];
        ++j;
        ++k;
    }

    // 打印完整数组及合并区间
    printFullArrayWithMerge(arr, n, left, right);

    delete[] L;
    delete[] R;
}

// 新增数组长度参数n,传递给merge函数
void mergeSort(int arr[], int left, int right, int n) {
    if (left < right) {
        int mid = left + (right - left) / 2;

        mergeSort(arr, left, mid, n);
        mergeSort(arr, mid + 1, right, n);

        merge(arr, left, mid, right, n);
    }
}

int main() {
    int N;
    cin >> N;

    int* arr = new int[N];
    for (int i = 0; i < N; ++i)
        cin >> arr[i];

    // 调用时传递数组长度N
    mergeSort(arr, 0, N - 1, N);

    delete[] arr;

    return 0;
}

修改说明

  1. 新增printFullArrayWithMerge函数:遍历整个数组,在合并区间的起始和结束位置分别添加[ 和 ],其余元素正常输出,满足题目要求的完整数组+合并部分标注的格式。
  2. 传递数组长度:给mergeSort和merge函数新增数组长度参数n,确保打印函数能访问到整个数组的所有元素。
  3. 替换打印逻辑:将merge函数中原有的子数组打印调用,替换为新的完整数组打印函数。

内容的提问来源于stack exchange,提问作者Mai Dương

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:08:13