public class BucketSortTest {
public static void main(String[] args) {
int arr[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
radixSort(arr);
for (int i : arr) {
System.out.print(i+" ");
}
}
public static void radixSort(int []arr) {
final int radix=10;
//先求出数组中的最大数,并把它赋值给max
int max=0;
for(int i=0;i<arr.length;i++){
if(arr[i]>max)
max=arr[i];
}
//得到最大数是几位数
int maxLength=maxLengthMethod(max);
int[] bucket=new int[arr.length];
for(int d=1;d<=maxLength;d++){
int[] count=new int[radix];
for (int j=0;j<arr.length;j++){
int k=getDigit(arr[j],d);
count[k]++;
}
//将前面的数据的量进行合并
for (int j=1;j<radix;j++){
count[j]=count[j]+count[j-1];
}
//要保证先进去的先出来
for (int j=arr.length-1;j>=0;j--){
//获取数字的个位、十位、百位等上的数
int k=getDigit(arr[j],d);
bucket[count[k]-1]=arr[j];
count[k]--;
}
for (int j=0;j< arr.length;j++){
arr[j]=bucket[j];
}
}
}
private static int getDigit(int x, int d) {
return ((x/(int) Math.pow(10,d-1))%10);
}
private static int maxLengthMethod(int max) {
int count=0;
while(max>0){
max=max/10;
count++;
}
return count;
}
}