package test;
import java.util.ArrayList;
public class Main{
public static void RadixSort(int[] nums){
int max=nums[0];
for(int i=0;i<nums.length;i++){
max=Math.max(max,nums[i]);
}
//建立十个桶
ArrayList<Integer>[] buckets=new ArrayList[10];
for(int i=0;i<10;i++){
buckets[i]=new ArrayList<>();
}
int k=getNum(max);
int start=0;
//循环遍历每个数字的每一位,从各位到十位
while(start<=k){
for(int i=0;i<nums.length;i++){
int num=getValueOfK(nums[i],start);
buckets[num].add(nums[i]);
}
int index=0;
for(int i=0;i<10;i++){
for(int j=0;j<buckets[i].size();j++){
nums[index++]=buckets[i].get(j);
}
//每次统计完把桶清空
buckets[i].clear();
}
start++;
}
}
//找到某个数的第k位
private static int getValueOfK(int num, int k) {
while(k>1){
num=num/10;
k--;
}
return num%10;
}
//计算最大数的位数
private static int getNum(int max) {
int count=0;
while(max>0){
max=max/10;
count++;
}
return count;
}
public static void main(String[] args){
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19,100,2223};
RadixSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}