//递归实现
void merge(int a[],int l1,int r1,int l2,int r2)
{
int i=l1,j=l2,index=0;
while(left<right)
{
while(left<rifht&&a[i]<a[j]) temp[index++]=a[i++];
while(a[i]>=a[j]) temp[index++]=a[j++];
}
while(i<=r1) temp[index++]=a[i++];
while(j<=r2) temp[index++]=a[j++];
for(int i=0;i<index;i++)
a[i+l1]=temp[i];
}
void mergesort(int a[],int left,int right)
{
if(left<right){
int mid=(left+right)/2;
mergesort(a,left,mid);
mergesort(a,mid+1,right);
merge(a,left,mid,mid+1,right);
}
}
//非递归实现
void merge(int a[],int l1,int r1,int l2,int r2)
{
int i=l1,j=l2,index=0;
while(left<right)
{
while(left<rifht&&a[i]<a[j]) temp[index++]=a[i++];
while(a[i]>=a[j]) temp[index++]=a[j++];
}
while(i<=r1) temp[index++]=a[i++];
while(j<=r2) temp[index++]=a[j++];
for(int i=0;i<index;i++)
a[i+l1]=temp[i];
}
void mergesort(int a[])//区间(1,n)
{
for(int step=2;step/2<=n;step*=2)
{
for(itn i=1;i<=n;i+=step)
{
int mid=i+step/2-1;
if(mid+1<=n)
merge(a,i,mid,mid+1,min(n,i+step-1));
}
}
}