const RADIX = 10;
const label: string[] = ['个位排序', '十位排序', '百位排序', '千位排序', '万位排序'];
let labelIdx: number = 0;
function countSort(arr: number[], n: number, d: number): void {
let countArr: number[] = new Array(RADIX).fill(0);
let sortArr: number[] = new Array(n).fill(0);
for (let i: number = 0; i < n; ++i) {
countArr[Math.trunc(arr[i] / d) % RADIX]++;
}
console.log(countArr);
for (let i: number = 1; i < RADIX; ++i) {
countArr[i] += countArr[i - 1];
}
console.log(countArr);
for (let i: number = n - 1; i >= 0; --i) {
sortArr[countArr[Math.trunc(arr[i] / d) % RADIX] - 1] = arr[i];
countArr[Math.trunc(arr[i] / d) % RADIX]--;
}
for (let i: number = 0; i < n; i++) {
arr[i] = sortArr[i];
}
console.log(label[labelIdx++], arr);
}
function radixSort(arr: number[], n: number): void {
let maxValue: number = Math.max(...arr);
labelIdx = 0;
for (let d: number = 1; Math.trunc(maxValue / d) > 0; d *= RADIX) {
countSort(arr, n, d);
}
}
const arr1: number[] = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48];
const arr2: number[] = [90, 57, 100, 44, 87, 9, 4, 34, 25, 58];
const arr3: number[] = [9000, 44, 2222, 444, 1, 5, 3, 88, 421];
radixSort(arr1, arr1.length);
console.log('结果:', arr1, '\n');
radixSort(arr2, arr2.length)
console.log('结果:', arr2, '\n')
radixSort(arr3, arr3.length)
console.log('结果:', arr3, '\n')