简体   繁体   English

为什么我的基数排序实现不起作用 - JavaScript

[英]Why my Implementation of Radix Sort doesn't work - JavaScript

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.函数getDigit()mostDigits()正常执行,因为我已经仔细检查了它们。 The problem is somewhere inside the radixSort() function.问题出在radixSort()函数内部。 I wrote my code based on the Illustration on Visualgo.我根据 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]))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM