const findMax = (arr, len) => {
let max = arr[0];
for (let i = 1; i < len; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
const calBitCount = (max) => {
return max.toString().length;
}
const getBitValue = (value, bit) => {
return Math.floor(value / Math.pow(10, bit)) % 10;
}
const radixSort = (arr, len) => {
let max = findMax(arr, len);
let bitCount = calBitCount(max);
let radixCount = 10;
let count = Array(radixCount).fill(0);
let tempArray = Array(len);
for (let b = 0; b < bitCount; ++b) {
count.fill(0);
for (let i = 0; i < len; ++i) {
let bitValue = getBitValue(arr[i], b);
count[bitValue]++;
}
for (let c = 1; c < radixCount; ++c) {
count[c] += count[c - 1];
}
for (let i = len - 1; i >=0; --i) {
let bitValue = getBitValue(arr[i], b);
tempArray[--count[bitValue]] = arr[i];
}
for (let i = 0; i < len; ++i) {
arr[i] = tempArray[i];
}
}
}
const printArray = (arr, len) => {
for (let i = 0; i < len; ++i) {
console.log(arr[i] + ' ');
}
console.log('\n');
}
let arr = [170, 45, 75, 90, 802, 24, 2, 66];
let len = arr.length;
printArray(arr,len);
radixSort(arr, len);
printArray(arr,len);