import java.util.Scanner;
import java.util.LinkedList;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class BaseNumBerSort {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n = scan.nextInt();
// scan.nextLine();
int[] arr = new int[n];
for(int i=0; i<n; i++) arr[i] = scan.nextInt();
int[] res = baseNumSort(arr);
for(int i=0; i<n; i++) System.out.print(res[i]+" ");
scan.close();
}
public static int[] baseNumSort(int[] arr){ // 基数排序
// 找到最大值 确定轮询位数次数
int radix = getRadix(arr);
LinkedList<Integer>[] bucket = new LinkedList[10]; // 位数桶
for(int i=0; i<bucket.length; i++) bucket[i] = new LinkedList<Integer>();
for(int i=0; i<radix; i++){ // 先按照个位 然后十位 百位...排序
for(int j=0; j<arr.length; j++){
bucket[getIndex(arr[j],i)].add(arr[j]);
}
int index = 0;
for(int k=0; k<bucket.length; k++){
while(!bucket[k].isEmpty()) arr[index++] = bucket[k].poll();
}
}
return arr;
}
public static int getIndex(int num, int radix){ // 获取指定位上的数
int ret = 0;
while(radix>=0){
if(num == 0) return 0;
ret = num%10;
num = num/10;
radix--;
}
return ret;
}
public static int getRadix(int[] arr){
int max = arr[0];
for(int i=1; i<arr.length; i++) {
max = max>arr[i]?max:arr[i];
}
return (max+"").length(); // 判断最大值一共有几位数
}
}
08-29
1398
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-08
849
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-24
930
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)