15145641

  归并排序是一种比较重要、稳定的排序。他的核心思想是分治,也就是二分法,实现方法是递归。递归函数可以让我们到达最小单元使最小单元有序,进而向上级回溯,不断的调整更大的单元,最终使整个序列有序。

  代码及样例如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100];
void Merge(int l,int mid,int r){
    int k=0,tmp[100],i=l,j=mid;
    while(i < mid && j < r){
        if(a[i] <= a[j]){
            tmp[k++] = a[i++];
        }
        else{
            tmp[k++] = a[j++];
        }
    }
    while(i < mid){
        tmp[k++] = a[i++];
    }
    while(j < r){
        tmp[k++] = a[j++];
    }
    for(int i = l;i < r;i++){
        a[i] = tmp[i-l];
    }
}
void Mysort(int l,int r){
    if(l+1 == r) return ;
    int mid = (l+r)>>1;
    Mysort(l,mid);
    Mysort(mid,r);
    Merge(l,mid,r);
}
int main(){
    int n;
    //freopen("1.txt","r",stdin);
    while(~scanf("%d",&n)){
        for(int i = 0;i < n;i++){
            scanf("%d",&a[i]);
        }
        Mysort(0,n);
        for(int i = 0;i < n;i++){
            printf("%d ",a[i]);
        }
        puts("");
    }
}

5
5 4 3 2 1
6
1 25 4 2 6 3
3
5 4 2
15
879789 15 212 20 2 -100 54 1 0 -0 48 78 78974 1561651 15

posted on 2016-06-25 19:18  icode-xiaohu  阅读(163)  评论(0编辑  收藏  举报