這是我的代碼:
// 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]))
輸出,其中值未按升序排序:
[[功能:移位]、[功能:移位]、1、12]
功能getDigit()并mostDigits()正常執行,因為我已經仔細檢查了它們。問題出在radixSort()函式內部。我根據 Visualgo 上的插圖撰寫了我的代碼。
uj5u.com熱心網友回復:
嘗試一下 :
// 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]))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/475661.html
標籤:javascript 基数排序
