算法归并排序 递归篇

void merge(int l,int r)
{
int left[N],right[N];
int mid=(l+r)/2;
int m=0,n=0;
for(int i=l;i<=mid;i++) //左半部分
left[m++]=a[i];
for(int i=mid+1;i<=r;i++) //右半部分
right[n++]=a[i];
int i=0,j=0,k=l;
while(i<m&&j<n){
if(left[i]<=right[j]){
a[k++]=left[i++];
}
else{
a[k++]=right[j++];
}
}
while(i<m) a[k++]=left[i++];
while(j<n) a[k++]=right[j++];
}
void mergeSort(int l,int r)
{
if(l<r){
int mid=(l+r)/2;
mergeSort(l,mid);
mergeSort(mid+1,r);
}
merge(l,r);
}

posted on 2016-09-28 19:57  远搏  阅读(178)  评论(0编辑  收藏  举报

导航