zoukankan      html  css  js  c++  java
  • 基数排序

    从个位到最高位对所有数字排列数位次。

    又叫做桶排序。

    时间复杂度很优秀,当然,排序时还可以干一些奇奇怪怪的事情。

    我还不会排负数。

    简单地排序并输出。a数组从0记录。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<ctype.h>
    using namespace std;
    inline int read()
    {
        int x=0,w=0;char c=getchar();
        while(!isdigit(c))w|=c=='-',c=getchar();
        while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
        return w?-x:x;
    }
    const int maxn=1e5+10;
    int a[maxn],buck[maxn];
    inline int get_max(int a[],int n)
    {
        int maxx=0;
        for(int i=0;i<n;i++)
        maxx=max(maxx,a[i]);
        return maxx;
    }
    inline void count_sort(int a[],int n,int exp)
    {
        int output[n],buck[10]={0};
        for(int i=0;i<n;i++)
            buck[(a[i]/exp)%10]++;
        for(int i=1;i<10;i++)
            buck[i]+=buck[i-1];
        for(int i=n-1;i>=0;i--)
            output[--buck[(a[i]/exp)%10]]=a[i];
        for(int i=0;i<n;i++)
            a[i]=output[i];
    }
    inline void radix_sort(int a[],int n)
    {
        int maxx=get_max(a,n);
        for(int i=1;(maxx/i)>0;i*=10)
            count_sort(a,n,i);
    }
    int main()
    {
        int n=read();
        for(int i=0;i<n;i++)
        a[i]=read();
        radix_sort(a,n);
        for(int i=0;i<n;i++)
            if(i!=n)printf("%d ",a[i]);
            else printf("%d
    ",a[i]);
        return 0;
    }
  • 相关阅读:
    ubuntu下安装配置apache2(含虚拟主机配置)
    ubuntu安装软件包apt-get和dpkg方法
    python日期,时间函数
    python多线程
    截取utf8中文字符串
    python解析json
    sqlite读写
    lambda,map,filter,reduce
    pyinstaller生成exe可执行程序
    对象练习
  • 原文地址:https://www.cnblogs.com/BrotherHood/p/13184889.html
Copyright © 2011-2022 走看看