zoukankan      html  css  js  c++  java
  • 「模板」 基数排序

    基数排序

    大约是逐十进制位的桶排序。

    分为MSD(最高位优先) && LSD(最低位优先)。

    本文代码为LSD。

    推荐百度百科

    #include <cstdio>
    #include <cstring>
    const int MAXN=100010;
    int n,a[MAXN];
    int MaxBit(int *a,int radix)//求最大位数
    {
    	int p=radix,ans=1;
    	for(int i=1;i<=n;++i)
    		while(a[i]>=p)
    			p*=radix,++ans;
    	return ans;
    }
    void RadixSort(int *a,int radix)
    {
    	int p=1,size=radix<<2,b[MAXN],*cnt=new int[radix];
    	for(int i=1,m=MaxBit(a,radix);i<=m;++i)
    	{
    		memset(cnt,0,size);
    		for(int j=1;j<=n;++j)//桶中数个数
    			++cnt[a[j]/p%radix];
    		for(int j=1;j<radix;++j)//分配
    			cnt[j]+=cnt[j-1];
    		for(int j=n,t;j>=1;--j)//收集
    			b[cnt[a[j]/p%radix]--]=a[j];
    		memcpy(a,b,sizeof b);//返回
    		p*=radix;
    	}
    	delete []cnt;
    }
    int main(int argc,char *argv[])
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    		scanf("%d",&a[i]);
    	RadixSort(a,10);
    	for(int i=1;i<=n;++i)
    		printf("%d ",a[i]);
    	putchar('
    ');
    	return 0;
    }
    

    谢谢阅读

  • 相关阅读:
    IntelliJ IDEA基本设置
    git安装
    Git的作用与安装
    git是什么
    SpringMVC控制器类方法的返回值
    SpringMVC中Model机制
    什么是Nosql
    如何使用Jedis操作redis
    redis中数据类型操作命令
    redis的全局命令
  • 原文地址:https://www.cnblogs.com/Capella/p/8251792.html
Copyright © 2011-2022 走看看