#include <stdio.h>
#include <stdlib.h>
void MergeSort(int *a,int ns,int ne)
{
//1.递归终止条件
if(ne-ns==1) return ;
//2.二分法,取中间位置,分开排序
int m=ns+(ne-ns)/2;
MergeSort(a,ns,m) ;
MergeSort(a,m,ne) ;
//3.合并
int *ta=new int[ne-ns] ;
int nl=ns,nr=m;
int nt=0;
for(;;){
if(nl>=m || nr>=ne) break;
if(a[nl]<=a[nr]) {ta[nt]=a[nl];nl++;nt++; }
else {ta[nt]=a[nr];nr++;nt++; }
}
//如果左半区间或右半区间没取完 ,放到临时数组中
while(nl<m) ta[nt++]=a[nl++];
while(nr<ne) ta[nt++]=a[nr++];
//临时数组赋值到数组a
for(int i=0;i<ne-ns;i++)
a[ns+i]=ta[i];
//释放临时数组
delete[] ta ;
}
int main()
{
int a[]={8,3,6,2,5,7,9,1,4,0};
int n=sizeof(a)/sizeof(int);
MergeSort(a,0,n);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
int main()
{
int a[]={8,3,6,2,5,7,9,1,4,0};
MergeSort(a,0,9);
for(int i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}