Kmonosis 2021-11-24 21:01 采纳率: 0%
浏览 23
已结题

为什么我的归并排序会这样出错

问题遇到的现象和发生背景 归并排序的测试发生了错误
问题相关代码,请勿粘贴截图
#include<bits/stdc++.h>
using namespace std;
void Merge(int *numbers,int length,int *temp,int begin,int end,int middle)
{
    if(numbers==nullptr||length<=0||begin<0||end>=length)
    {
        printf("Invalid input!\n");
        return ;
    }
    int leftIndex = begin;
    int rightIndex =middle+1;
    int tempIndex=begin;
    while (leftIndex<=middle && rightIndex<=end)
    {
        if(numbers[leftIndex]  <  numbers[rightIndex])
        {
            temp[tempIndex]=numbers[leftIndex];
            leftIndex++;
        }else
        {
            temp[tempIndex]=numbers[rightIndex];
            rightIndex++;
        }
        tempIndex++;
    }
    
    while(leftIndex <= middle)
    {
        temp[tempIndex]=numbers[leftIndex];
        tempIndex++;
        leftIndex++;
    }
    while(rightIndex<=middle)
    {
        temp[tempIndex]=numbers[rightIndex];
        tempIndex++;
        rightIndex++;
    }
    for(int i=begin;i<=end;i++)
    {
        numbers[i]=temp[i];
    }
        
}
void MergeSort(int *numbers,int length,int *temp,int begin,int end)
{
    if(numbers==nullptr||length<=0||begin<0||end>=length)
    {
        printf("Invalid input!\n");
        return ;
    }
    if(begin==end)
    {
        return ;
    }
    if(end-begin==1)
    {
        if(numbers[begin]>numbers[end])
        {
            int temp=numbers[begin];
            numbers[begin]=numbers[end];
            numbers[end]=temp;
        }
        return ;
    }
    int middle =(end-begin)/2+begin;
    MergeSort(numbers,length,temp,begin,middle);
    MergeSort(numbers,length,temp,middle+1,end);
    Merge(numbers,length,temp,begin,end,middle);
}
int main()
{
    int nums[9]={16,15,4,19,2,17,1,64,55};
    for(int i=0;i<9;i++)
    {
        cout<<nums[i]<<" ";
    } 
    cout<<endl;
    int *temp=new int[9];
    MergeSort(nums,9,temp,0,8);
    
    for(int i=0;i<9;i++)
    {
        cout<<nums[i]<<" ";
    }
    delete[] temp;
    temp = nullptr;
    cout<<endl;
    return 0;
}



![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/791567857736180.png "#left")

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • Kmonosis 2021-11-24 21:01
    关注

    img

    评论

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表