算法思想(递归)
左边界为l 右边界为r 当l>=r的时候 排序结束
不断取中点递归两边 从小回推出大
下面是实现
0000000
i
0000000
j
这里有两条队列
比较a[i]和a[j]大小
小的存到新数组中存储
直到有一个列表已经被删去了
此时对剩下的列表进行扫尾
并将结果赋回给原数组 以进行下一步的递归
代码模板如下
void Merge_sort(int a[],int l,int r)
{
if(l>=r) return;
int mid=(l+r)>>1;int i=l,j=mid+1,k=0;
Merge_sort(a,l,mid),Merge_sort(a,mid+1,r);
while(i<=mid && j<=r)
{
if(a[i]<a[j]) tem[k++] = a[i++];
else tem[k++] = a[j++];
}
while(i<=mid) tem[k++] = a[i++];
while(j<=r) tem[k++] = a[j++];
for(int i=l,j=0;i<=r;i++,j++) a[i] = tem[j];
}