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

C++归并排序实现无报错但运行异常,请求问题排查

解决你的归并排序程序无响应问题

我帮你排查了代码里的几个关键问题,这些正是导致程序卡死无响应的核心原因:

  • mergeSort函数缺少递归终止条件:当前的mergeSort会无限递归调用自己,直到栈溢出,这直接导致程序失去响应。必须添加判断,当beg >= end时停止递归——因为此时子数组只有一个元素,本身就是有序的,无需再拆分。

  • 数组大小计算错误:sizeof(arr)返回的是整个数组的字节数(你的代码里是400,因为int占4字节,100个元素),而非元素个数。正确的计算方式应该是sizeof(arr)/sizeof(arr[0]),这样才能得到数组实际的元素数量。

  • merge函数中元素回写逻辑错误:你当前的循环for(int k = beg; k < index; k++) arr[k] = temp[k];会把temp里的元素错误写入arr的beg到index位置,但temp里的元素是从0开始存储的,正确的对应关系应该是temp[0]对应arr[beg]、temp[1]对应arr[beg+1],直到覆盖arr[end]。

下面是修正后的完整代码:

#include<iostream>
using namespace std;

void merge(int arr[], int beg, int mid, int end) //function to merge the arrays
{
    int i = beg;
    int j = mid + 1;
    int index = 0;
    int temp[100];
    while(i <= mid && j <= end)
    {
        if(arr[i] < arr[j])
        {
            temp[index] = arr[i];
            i++;
        }
        else
        {
            temp[index] = arr[j];
            j++;
        }
        index++;
    }
    while(i <= mid)
    {
        temp[index] = arr[i];
        i++;
        index++;
    }
    while(j <= end)
    {
        temp[index] = arr[j];
        j++;
        index++;
    }
    // 修正:将temp中的元素正确回写到arr的对应位置
    for(int k = 0; k < index; k++)
        arr[beg + k] = temp[k];
}

void mergeSort(int arr[], int beg, int end) //dividing the array
{
    // 新增:递归终止条件,子数组只有一个元素时停止
    if(beg >= end)
        return;
    int mid = (beg + end)/2;
    mergeSort(arr, beg, mid);
    mergeSort(arr, mid+1, end);
    merge(arr, beg, mid, end);
}

int main(void)
{
    int arr[100];
    int size;
    // 优化:让用户先输入实际元素个数,避免处理未初始化的随机值
    cout<<"Enter the number of elements (max 100): "<<endl;
    cin>>size;
    if(size > 100) size = 100; // 限制最大输入数量
    cout<<"Enter the array elements: "<<endl;
    for(int i = 0; i < size; i++)
        cin>>arr[i];
    mergeSort(arr, 0, size-1);
    cout<<"Sorted array: "<<endl;
    for(int i = 0; i < size; i++)
        cout<<arr[i]<<" ";
    cout<<endl;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:50:00