算法基本流程图解: 后续补
算法时间复杂度 : O(n)
算法设计思想:
取得所有数的数位并统一为相同的长度,数位较短的数字前面补零。从低位开始排序,分别放入0~9个队列中,然后采用先进先出的原则进行收集;在按照高位排序,然后在收集;依次类推,直到最高位,最终得到排好序的数列。
代码实现:
private void sort(int[] arr) {
int max = arr[0];
// 最大值
for (int i = 1; i < arr.length; i++) {
if (max < arr[i]) max = arr[i];
}
// 位数
int len = (max + "").length();
List<Integer>[] bucket = new ArrayList[10];
for (int i = 0; i < bucket.length; i++) {
bucket[i] = new ArrayList<>();
}
int j = 0;
while (j < len) {
// 入桶
for (int i = 0; i < arr.length; i++) {
int idx = (int) (arr[i] / Math.pow(10, j)) % 10;
bucket[idx].add(arr[i]);
}
int temp = 0;
// 出桶
for (int i = 0; i < bucket.length; i++) {
for (int z = 0; z < bucket[i].size(); z++) {
arr[temp++] = bucket[i].get(z);
}
bucket[i].clear();
}
j++;
}
}