归并排序,分治思想

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;}

,有理想在的地方,地狱就是天堂

归并排序,分治思想

相关文章:

你感兴趣的文章:

标签云: