题目描述
归并排序模板
样例
void merge_sort(int q[],int l,int r)
{
if(l>=r) return ;
//将数组左右两边分别递归排序
int mid=(l+r)>>1;
merge_sort(q,l,mid);
merge_sort(q,mid+1,r);
int i=l,j=mid+1;
int k=0;
//将左右两边依次比较大小,将较小数存入a[]中
while(i<=mid&&j<=r)
{
if(q[i]<q[j])a[k++]=q[i++];
else a[k++]=q[j++];
}
//前提是左右两边有一边已经存完,则存另一边剩下的所有数
while(i<=mid) a[k++]=q[i++];
while(j<=r) a[k++]=q[j++];
//将排好序的数组再存回原来的数组中
for(i=l,j=0;i<=r;i++,j++)
{
q[i]=a[j];
}
}