Aquí está mi código:
// 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]))La salida, en la que los valores no se ordenaron en orden ascendente:
[ [Función: cambio], [Función: cambio], 1, 12 ]
Las funciones getDigit() y mostDigits() se ejecutan normalmente ya que las revisé dos veces. El problema está en algún lugar dentro de la función radixSort() . Escribí mi código basado en la Ilustración en Visualgo.
intentalo :
// 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]))