merge函数将两列有序序列合成一列。
merge_sort 函数使用分治思想,递归求解。将对一个序列排序转换成对左右两个序列排序,一直到序列长度为一时,递归开始回升。再将左右两个已经排好序的序列合并。
// // main.cpp // merge_sort // // Created by Fangpin on 15/3/9. // Copyright (c) 2015年 FangPin. All rights reserved. // #include <iostream> #include <cstdio> const int MAXN=1e10; int a[20006],b[20005],c[20005]; void merge(int p,int q,int r){ int j=0; for(int i=p;i<=q;++i) b[j++]=a[i]; b[j]=MAXN;j=0; for(int i=q+1;i<=r;++i) c[j++]=a[i]; c[j]=MAXN;j=0; int k=0; for(int i=p;i<=r;++i){ if(b[j]<=c[k]) a[i]=b[j++]; else a[i]=c[k++]; } } void merge_sort(int l,int r){ if(l>=r) return; int m=(l+r)>>1; merge_sort(l,m); merge_sort(m+1,r); merge(l,m,r); } int main(int argc, const char * argv[]) { // insert code here... int n; while(~scanf("%d",&n)){ for(int i=0;i<n;++i){ scanf("%d",&a[i]); } merge_sort(0,n-1); for(int i=0;i<n;++i){ if(i) printf(" "); printf("%d",a[i]); } printf("\n"); } return 0; }
时间: 2024-10-28 15:49:46