问题遇到的现象和发生背景 归并排序的测试发生了错误
问题相关代码,请勿粘贴截图
#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")
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果