算法模板之基数排序
基数排序,简单点说就是从低位按照高位排序,所以浅显的判断,排序的时间消耗大抵是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();
}
}
}