浅谈归并排序
归并排序 是一种利用二分法的稳定排序 时间复杂度为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]; }