zoukankan      html  css  js  c++  java
  • 【模板】 归并排序

    递归版本:(空间贼大)

    //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/
  • 相关阅读:
    关于Tomcat版本的使用
    Twitter
    Thinkpad在Windows8上热键的解决方案
    关于C#中程序当前目录的小随笔
    【Network】OSPF排错及其七种状态机
    如何修改已有的ONNX模型
    安全计算环境(三)Windows服务器4
    安全计算环境(三)Linux服务器5
    安全计算环境(三)Linux服务器2
    安全计算环境(二)防火墙2
  • 原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9247974.html
Copyright © 2011-2022 走看看