代码:
void merge(int *a,int l,int r)
{
if(l>=r) return;//递归终止
int mid=l+r>>1;
merge(a,l,mid);
merge(a,mid+1,r);//分段一直递归下去
int k=0,i=l,j=mid+1,temp[N];//i,j相当于两个指针,temp是个临时数组
while(i<=mid&&j<=r)//i和j都有范围限制,排序开始
{
if(a[i]<=a[j]) temp[k++]=a[i++];
else temp[k++]=a[j++];
}
while(i<=mid) temp[k++]=a[i++];
while(j<=r) temp[k++]=a[j++];
for(int i=l,j=0;i<=r;i++,k++)//i<=r,j<k
a[i]=temp[j];
}
183





