算法模板之基数排序

基数排序,简单点说就是从低位按照高位排序,所以浅显的判断,排序的时间消耗大抵是O(n)的。

C++ 板子

void radixsort(int n)
{
	int mx=*max_element(a,a+n);
	int range=0,base=1;
	while(mx) mx/=10,++range;
	for(int i=0;i<range;i++)
	{
		for(int j=0;j<n;j++)
		{			
			int k = (a[j]/base) % 10;
			radix[k][cont[k]] = a[j];
			cont[k]++;
		}
		for(int j = 0,l=0;j < 10;j++)
			for(int k = 0;k<cont[j];k++)
				a[l++] = radix[j][k];
		memset(cont,0,sizeof(cont));
		base*=10;
	}
}

JAVA 板子

public static void radixSort(){
    List<List<Integer>> t = new ArrayList();
    for(int i=0;i<=9;i++) {
        t.add(new ArrayList<Integer>());
    }
    
    int n=a.length,mx = a[0];
    for(int d:a) mx=Math.max(mx,d);
    int len=String.valueOf(mx).length();
    int base=1;
    
    for(int i=0;i<len;i++) {
        for(int d:a) {
 			int p=(d/base)%10;
            t.get(p).add(d);           
        }
        base*=10;
        int cnt=0;
        for(List<Integer>tt: t){
            for(Integer d:tt){
                a[cnt++]=d;
            }
            tt.clear();
        }
    }
}
posted @ 2020-10-21 22:36  Aackkom  阅读(109)  评论(0编辑  收藏  举报