用在有数量级差异的数的比较上可能比较好用。从个位比较到最高位。
import java.util.*;
class RadixSort {
public static void main(String[] args) {
int[] arr=new int[]{1,1009,887,664,559,337,43,68,97,30005,28,666666,88888};
radixSort(arr);
}
public static void radixSort(int[] arr){
//找出最大的数
int max=arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
}
}
//算出最大的数是几位数
int maxlength=0;
while(max>0){
max/=10;
maxlength++;
}
//放进桶里
int[][] buckets=new int[10][arr.length];
int[] counts=new int[10]; //10个计数器
int div=1;
for(int k=0;k<maxlength;k++){
for(int m=0;m<arr.length;m++){
int digit=arr[m]/div%10;//取余
buckets[digit][counts[digit]++]=arr[m];
}
div*=10;//下次的除数
int total=0;
//把10个桶中的数按桶的顺序放回arr
for(int n=0;n<10;n++){
//每个桶进行取出,放进arr
for(int b=0;b<counts[n];b++){
arr[total++]=buckets[n][b];
}
counts[n]=0;
}
disp(arr);
}
}
public static void disp(int[] arr){
System.out.println(Arrays.toString(arr));
}
}