//归并排序-递归实现
void Merge(int A[],int TmpA[],int L,int R,int RightEnd)
{
int LeftEnd,Num,Tmp;//记录左边最后元素,元素总数,临时变量用来遍历;
int i;
LeftEnd=R-1;
Tmp=L;
Num=RightEnd-L+1;
while(L<=LeftEnd&&R<=RightEnd)
{
if(A[L]<A[R])
TmpA[Tmp++]=A[L++];
else
TmpA[Tmp++]=A[R++];
}
while(L<=LeftEnd)
TmpA[Tmp++]=A[L++];
while(R<=RightEnd)
TmpA[Tmp++]=A[R++];
for(i=0;i<Num;i++,RightEnd--)
A[RightEnd]=TmpA[RightEnd];
}
//核心递归排序
void Msort(int A[],int TmpA[],int L,int RightEnd)
{
int center;
if(L<RightEnd)
{
center=(L+RightEnd)/2;
Msort(A,TmpA,L,center);
Msort(A,TmpA,center+1,RightEnd);
Merge(A,TmpA,L,center+1,RightEnd);
}
}
void MergeSort(int A[],int N)
{
int *TmpA;
TmpA=(int *)malloc(sizeof(int)*N);
if(TmpA!=NULL)
{
Msort(A,TmpA,0,N-1);
free(TmpA);
}
else
printf("空间分配失败");
}