归并排序【模板】

测评传送门(同快排)

又快又稳的排序方法,我的最爱~

解析:

  归并就是裸裸的二分,一直分一直分直到可以最轻松地判断大小来排序

 

  代码已经解释的很明白了,就不多啰嗦啦

 

代码如下:

#include<stdio.h>
using namespace std;
int a[100001],temp[100001];

void bin(int l,int r)
{
    if(l==r) return ;
    int mid=(l+r)>>1;
    bin(l,mid);
    bin(mid+1,r);
    int i=l,j=mid+1,k=l;
    while(i<=mid && j<=r) 
    {
        if(a[i]<=a[j]) {
            temp[k]=a[i];
            k++,i++;
        }
        else 
        {
            temp[k]=a[j];
            k++,j++;
        }
    }
    
    while(i<=mid)
    {
        temp[k]=a[i];
        k++,i++;
    }
    while(j<=r)
    {
        temp[k]=a[j];
        k++,j++;
    }
    for(int i=l;i<=r;++i){
        a[i]=temp[i];
    }
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i]);
    }
    bin(1,n);
    for(int i=1;i<=n;++i){
        printf("%d ",a[i]);
    }
    return 0;
}

 

posted @ 2018-08-04 21:19  qseer  阅读(1310)  评论(0编辑  收藏  举报