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

C++实现归并排序无报错输出异常,求定位merge函数错误

归并排序代码问题修复

你的代码一共存在2处明显错误,修改后即可正常运行:

错误1:merge函数剩余元素处理笔误

你在处理第二个子数组剩余元素的循环中,错误递增了i变量,代码如下:

while (j < n2) {
    arr[p] = arr2[j];
    i++; // 此处为错误代码
    p++;
}

因为循环的终止条件是j < n2,你一直递增i不会改变j的值,会导致程序进入死循环,甚至越界访问内存输出乱码。
修复方案:将i++替换为j++即可。

错误2:merge_sort函数mid下标计算错误

你当前计算中间下标的逻辑是错误的:

int mid = start + (end - 1) / 2;

这个计算方式没有考虑start的偏移量,会导致左右区间拆分错误,排序逻辑完全失效。
修复方案:将mid计算逻辑替换为int mid = start + (end - start) / 2;

修复后可正常运行的完整代码

#include <iostream>
using namespace std;

void merge(int arr[], int start, int mid, int end) {
    int n1 = mid - start + 1;
    int n2 = end - mid;
    
    int arr1[n1], arr2[n2];
    for (int i = 0; i < n1; i++) {
        arr1[i] = arr[start + i];
    }
    for (int j = 0; j < n2; j++) {
        arr2[j] = arr[mid + 1 + j];
    }

    int i = 0, j = 0, p = start;
    
    while (i < n1 && j < n2) {
        if (arr1[i] <= arr2[j]) {
            arr[p] = arr1[i];
            i++;
        } else {
            arr[p] = arr2[j];
            j++;
        }
        p++;
    }
    while (i < n1) {
        arr[p] = arr1[i];
        i++;
        p++;
    }

    while (j < n2) {
        arr[p] = arr2[j];
        j++;
        p++;
    }
}

void merge_sort(int arr[], int start, int end) {
    if (start >= end) {
      return;
    }
    int mid = start + (end - start) / 2;
    merge_sort(arr, start, mid);
    merge_sort(arr, mid + 1, end);
    merge(arr, start, mid, end);
}

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++)
        cout << arr[i] << " ";
    cout << endl;
}

int main() {
    int arr[] = { 6, 5, 12, 10, 9, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    
    merge_sort(arr, 0, n - 1);
    cout << "The sorted array is: " << endl;
    printArray(arr, n);
    return 0;
}

运行后输出:

The sorted array is: 
1 5 6 9 10 12 

内容的提问来源于stack exchange,提问作者Leo Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:57:01