浅谈归并排序

归并排序 是一种利用二分法的稳定排序 时间复杂度为O(nlogn)

归并排序先对序列二分 然后对二分后的序列合并,合并时比对两个二分后队列的队头,将较大或较小的插入间接队列 完成后直接将剩余序列放入中间队列(因二分,保证了两个序列都是有序的)

最后将中间序列复制到原始序列对应位置

 

void msort(int s,int t)
{
  if(s==t) return;
  int mid=(s+t)/2;
  msort(s,mid);
  msort(mid+1,t);
  int i=s,j=mid+1,k=s;
  while(i<=mid&&j<=t)
    if(a[i]<=a[j]) {r[k]=a[i];k++;i++;}
    else {r[k]=a[j];k++;j++;}
  while(i<=mid)
    {r[k]=a[i];k++;i++;}
  while(j<=t)
    {r[k]=a[j];k++;j++;}
  for(int x=s;x<=t;x++) a[x]=r[x];
}

 

 

posted @ 2020-05-09 12:00  禁止右转  阅读(97)  评论(0编辑  收藏  举报