基數排序,簡單點說就是從低位按照高位排序,因此淺顯的判斷,排序的空間消耗大抵是O(n)的。java
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; } }
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(); } } }