Here is my code:
// get digit at a specific location.
// getDigit(12345,0) -> output: 5
function getDigit(num1, i) {
num1 = String(num1);
num1 = num1.split('').reverse().join('');
if (i>= num1.length) { return 0 }
else { return parseInt(num1[i]) }
}
function mostDigits(array1) {
if (array1.length == 0) {
return 0
}
array1 = array1.map(x => String(x).length)
return Math.max(...array1)
}
function radixSort(nums) {
let array1 = [[], [], [], [], [], [], [], [], [], []]
let maxnum = mostDigits(nums);
for (let i = 0; i <= maxnum; i++) {
for (let k = 0; k < nums.length; k++) {
if (array1[getDigit(nums[k], i)]) {
array1[getDigit(nums[k], i)].push(nums[k]);
// here I shift the corresponding number out of the array 'nums', which I add back later
nums.shift()
}
}
for (let q = 0; q <= 9; q++) {
for (let m = 0; m < array1[q].length; m++) {
let temp = array1[q].shift;
nums.unshift(temp);
}
}
}
}
return nums
}
console.log(radixSort([8, 6, 1, 12]))
The output, in which the values weren't sorted in ascending order:
[ [Function: shift], [Function: shift], 1, 12 ]
The functions getDigit()
and mostDigits()
execute normally as I have double checked them. The problem is somewhere inside the radixSort()
function. I wrote my code based on the Illustration on Visualgo.
try it :
// get digit at a specific location.
// getDigit(12345,0) -> output: 5
function getDigit(num1, i) {
num1 = String(num1);
num1 = num1.split('').reverse().join('');
if (i>= num1.length) { return 0 }
else { return parseInt(num1[i]) }
}
function mostDigits(array1) {
if (array1.length == 0) {
return 0
}
array1 = array1.map(x => String(x).length)
return Math.max(...array1)
}
function radixSort(nums) {
let maxnum = mostDigits(nums);
for (let i = 0; i <= maxnum; i++) {
let array1 = Array.from({ length: 10 }, () => []);
for (let k = 0; k < nums.length; k++) {
if (array1[getDigit(nums[k], i)]) {
array1[getDigit(nums[k], i)].push(nums[k]);
}
}
nums = array1.flat();
}
return nums
}
console.log(radixSort([8, 6, 1, 12, 44, 4]))