为什么我写的归并排序数组4可以排序,10就会出错

#include<iostream>
using namespace std;
int merge(int arr[],int begin,int middle,int end);
int mergeSort(int arr[],int begin,int end){
	if(end-begin==1){//如果区间中只有两个元素 
		if(arr[begin]>arr[end]){
			int temp=arr[begin];
			arr[begin]=arr[end];
			arr[end]=temp;
		} 
		return 0;
	}
	else if(end-begin==0){//区间中只有一个数
		return 0; 
	}
	else{//多于两个数则继续划分 
		int m=(begin+end)/2;
		mergeSort(arr,begin,m);
		mergeSort(arr,m+1,end);
		merge(arr,begin,m,end);
		
	}
	
} 

int merge(int arr[],int begin,int middle,int end){
	int help[end-begin+1];//帮助数组,将排好序的数据放入新数组
	int i=begin;
	int j=middle+1;
	int k=begin;
	while(i<=middle&&j<=end){
		help[k++]=arr[i]<arr[j]?arr[i++]:arr[j++];
	}
	while(i<=middle)
		help[k++]=arr[i++];
	while(j<=end)
		help[k++]=arr[j++];	
	for(int i=0;i<k;i++){//将新数组中排好的数传给arr【】 
		arr[i]=help[i];
	}
}
int main(){
	int num;
	cout<<"输入数组长度:"<<endl;
	cin>>num; 
	int R[num];
	cout<<"输入数组数据()";
	for(int i=0;i<num;i++){
		cin>>R[i]; 
	}
	mergeSort(R,0,num);
	for(int j=0;j<num;j++)
		cout<<R[j]<<" ";
}

 

参考一下这个:https://edu.csdn.net/learn/4583?spm=1002.2001.3001.4143

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632