• 【模板】 归并排序


    递归版本:(空间贼大)

    //Menteur_Hxy
    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #define ll long long
    #define f(a,b,c) for(register int a=(b);a<=(c);a++)
    using namespace std;
    
    inline ll rd() {
        ll x=0,fla=1; char c=' ';
        while(c<'0' || c>'9') {c=getchar();if(c=='-') fla=-fla;}
        while(c>='0' && c<='9') x=x*10+c-'0',c=getchar();
        return x*fla;
    }
    
    inline void out(ll x){
        int a[25],wei=0;
        if(x<0) putchar('-'),x=-x;
        for(;x;x/=10) a[++wei]=x%10;
        if(wei==0){ puts("0"); return;}
        for(int j=wei;j>=1;--j) putchar('0'+a[j]);
        putchar(' ');
    }
    
    const int MAX=10010;
    int n;
    int a[MAX];
    
    void merge(int *num,int *a,int l,int r) {
        int i=l,j,k=l,m=(l+r)>>1;
        for(j=m+1;i<=m && j<=r;k++) 
            if(num[i]<=num[j]) a[k]=num[i++];
            else a[k]=num[j++];
        while(i<=m) a[k++]=num[i++];
        while(j<=r)   a[k++]=num[j++];
    }
    
    void mergesort(int *num,int *a,int l,int r) {
        if(l==r) a[l]=num[l];
        else {
            int t[MAX],mid=(l+r)>>1;
            mergesort(num,t,l,mid);
            mergesort(num,t,mid+1,r);
            merge(t,a,l,r);
        }
    }
    
    int main() {
        n=rd();
        f(i,1,n) a[i]=rd();
        mergesort(a,a,1,n);
        f(i,1,n) out(a[i]);
        return 0;
    }

    迭代版本:(比较正常)

    //Menteur_Hxy
    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    #include <algorithm>
    #include <cstdlib>
    #define ll long long
    #define f(a,b,c) for(register int a=(b);a<=(c);a++)
    using namespace std;
    
    inline ll rd() {
        ll x=0,fla=1; char c=' ';
        while(c<'0' || c>'9') {c=getchar();if(c=='-') fla=-fla;}
        while(c>='0' && c<='9') x=x*10+c-'0',c=getchar();
        return x*fla;
    }
    
    inline void out(ll x){
        int a[25],wei=0;
        if(x<0) putchar('-'),x=-x;
        for(;x;x/=10) a[++wei]=x%10;
        if(wei==0){ puts("0"); return;}
        for(int j=wei;j>=1;--j) putchar('0'+a[j]);
        putchar(' ');
    }
    
    const int MAX=100010;
    int n;
    int a[MAX],temp[MAX];
    
    void mergesort(int *num,int l,int r) {
        int k=0,lmi,rmi,lma,rma;
        for(int i=1;i<=r-l;i*=2) {
            for(lmi=l; lmi<=r-i; lmi=rma+1) {
                lma=lmi+i-1,rmi=lma+1,rma=min(r,rmi+i-1);
                // out(lmi),out(lma),out(rmi),out(rma);putchar('
    ');
                while(lmi<=lma && rmi<=rma) 
                    if(num[lmi] < num[rmi]) temp[k++]=num[lmi++];
                    else temp[k++]=num[rmi++];
                    // out(lmi),out(lma),out(rmi),out(rma);putchar('
    ');
                while(lmi <= lma) num[--rmi]=num[lma--];
                while(k) num[--rmi]=temp[--k];
                    // ,out(temp[k]);
                // putchar('
    ');
                // for(int i=1;i<=n;i++) cout<<num[i]<<" ";
                // putchar('
    ');
            } 
        }
    }
    
    int main() {
        n=rd();
        f(i,1,n) a[i]=rd();
        mergesort(a,1,n);
        f(i,1,n) out(a[i]);
        return 0;
    }
    版权声明:本文为博主原创文章,未经博主允许不得转载。 博主:https://www.cnblogs.com/Menteur-Hxy/
  • 相关阅读:
    病毒侵袭持续中---hdu3065(AC自动机模板)
    病毒侵袭---hdu2896(AC自动机)
    Keywords Search---hdu2222(AC自动机 模板)
    Theme Section---hdu4763(kmp, Next数组的运用)
    Girls' research---hdu3294(回文子串manacher)
    吉哥系列故事——完美队形II---hdu4513(最长回文子串manacher)
    String Boot-thymeleaf使用(四)
    Spring Boot-properties使用(二)
    Spring Boot-springbootHelloword(一)
    redis-运维-redis单机和集群
  • 原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9247974.html
Copyright © 2020-2023  润新知