zoukankan      html  css  js  c++  java
  • 排序 快排&归并&基数

    #include<cstdio> 
    #include<cstring>
    #include<cmath>
    #include<ctime>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<set>
    #define maxint (2147483647)
    #define l(a) ((a)<<1)
    #define r(a) ((a)<<1|1)
    #define b(a) (2<<(a))
    #define rep(i,a,b) for(int i=a;i<=(b);i++)
    #define clr(a) memset(a,0,sizeof(a))
    typedef long long ll;
    using namespace std;
    int readint(){
        int t=0,f=1;char c=getchar();
        while(!isdigit(c)){
            if(c=='-') f=-1;
            c=getchar();
        }
        while(isdigit(c)){
            t=(t<<3)+(t<<1)+c-'0';
            c=getchar();
        }
        return t*f;
    }
    ll readll(){
        ll t=0ll,f=1ll;char c=getchar();
        while(!isdigit(c)){
            if(c=='-') f=-1ll;
            c=getchar();
        }
        while(isdigit(c)){
            t=(t<<3ll)+(t<<1ll)+ll(c-'0');
            c=getchar();
        }
        return t*f;
    }
    const int maxn=100009;
    int n,t,a[maxn],b[maxn];
    void merge_sort(int l,int r){
        if(l==r) return;
        int mid=(l+r)>>1,L=l,R=mid+1;
        merge_sort(l,mid);
        merge_sort(mid+1,r);
        do{
            if(L>mid) b[L+R-mid-1]=a[R++];
            else if(R>r) b[L+R-mid-1]=a[L++];
            else if(a[L]<a[R]) b[L+R-mid-1]=a[L++];
            else b[L+R-mid-1]=a[R++];
        }while(L<=mid||R<=r);
        rep(i,l,r) a[i]=b[i];
    }
    int main(){
        //freopen("#intput.txt","r",stdin);
        //freopen("#output.txt","w",stdout);
        n=readint();
        rep(i,1,n) a[i]=readint();
        merge_sort(1,n);
        rep(i,1,n){
            printf("%d",a[i]);
            putchar(i==n?'
    ':' ');
        }
        //fclose(stdin);
        //fclose(stdout);
        return 0;
    }
    归并
    #include<cstdio> 
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<set>
    #define maxint (2147483647)
    #define l(a) ((a)<<1)
    #define r(a) ((a)<<1|1)
    #define b(a) (2<<(a))
    #define rep(i,a,b) for(int i=a;i<=(b);i++)
    #define clr(a) memset(a,0,sizeof(a))
    typedef long long ll;
    using namespace std;
    int readint(){
        int t=0,f=1;char c=getchar();
        while(!isdigit(c)){
            if(c=='-') f=-1;
            c=getchar();
        }
        while(isdigit(c)){
            t=(t<<3)+(t<<1)+c-'0';
            c=getchar();
        }
        return t*f;
    }
    int n,a[100009];
    void qsort(int L,int R){
        int mid=a[(L+R)>>1],l=L,r=R;
        while(l<=r){
            while(a[l]<mid) l++;
            while(a[r]>mid) r--;
            if(l<=r) swap(a[l++],a[r--]);
        }
        if(L<r) qsort(L,r);
        if(l<R) qsort(l,R);
    }
    int main(){
        //freopen("#input.txt","r",stdin);
        //freopen("#output.txt","w",stdout);
        n=readint();
        rep(i,0,n-1) a[i]=readint();
        qsort(0,n-1);
        rep(i,0,n-1){
            printf("%d",a[i]);
            if(i!=n-1) putchar(' ');
        }
        //fclose(stdin);
        //fclose(stdout);
        return 0;
    }
    快排
     1 #include<cstdio> 
     2 #include<cstring>
     3 #include<cmath>
     4 #include<ctime>
     5 #include<iostream>
     6 #include<algorithm>
     7 #include<queue>
     8 #include<set>
     9 #define inf (0x7fffffff)
    10 #define l(a) ((a)<<1)
    11 #define r(a) ((a)<<1|1)
    12 #define b(a) (1<<(a))
    13 #define rep(i,a,b) for(int i=a;i<=(b);i++)
    14 #define clr(a) memset(a,0,sizeof(a))
    15 typedef long long ll;
    16 typedef unsigned long long ull;
    17 using namespace std;
    18 int readint(){
    19     int t=0,f=1;char c=getchar();
    20     while(!isdigit(c)){
    21         if(c=='-') f=-1;
    22         c=getchar();
    23     }
    24     while(isdigit(c)){
    25         t=(t<<3)+(t<<1)+c-'0';
    26         c=getchar();
    27     }
    28     return t*f;
    29 }
    30 const int maxn=100009;
    31 int n,mx,l,x[maxn],cnt[10],a[10][maxn];
    32 void bsort(){
    33     int t=1;
    34     rep(i,1,l){
    35         clr(cnt);
    36         rep(j,1,n){
    37             int d=x[j]%(t*10)/t;
    38             a[d][++cnt[d]]=x[j];
    39         }
    40         int tmp=0;
    41         rep(j,0,9) rep(k,1,cnt[j]) x[++tmp]=a[j][k];
    42         //rep(j,1,n) printf("%d ",x[j]);puts("");
    43         t*=10;
    44     }
    45     rep(i,1,n){
    46         printf("%d",x[i]);
    47         putchar(i==n?'
    ':' ');
    48     }
    49 }
    50 int main(){
    51     //freopen("#input.txt","r",stdin);
    52     //freopen("#output.txt","w",stdout);
    53     n=readint();
    54     rep(i,1,n){
    55         x[i]=readint();mx=max(mx,x[i]);
    56     }
    57     for(l=0;mx;mx/=10) l++;
    58     bsort();
    59     //fclose(stdin);
    60     //fclose(stdout);
    61     return 0;
    62 }
    基数排序
  • 相关阅读:
    leetcode 62. Unique Paths
    leetcode 345. Reverse Vowels of a String
    leetcode 344. Reverse String
    Centos7.4 kafka集群安装与kafka-eagle1.3.9的安装
    yarn调度器 FairScheduler 与 CapacityScheduler
    Hive性能优化
    HBase笔记
    Zookeeper笔记
    Hadoop组件详解(随缘摸虾)
    ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式集群搭建
  • 原文地址:https://www.cnblogs.com/chensiang/p/7664319.html
Copyright © 2011-2022 走看看