我刚刚经历了一些练习问题以便在排序时刷新,我遇到了这个问题?
我快速排序数组,当我console.log(quicksort(inputArray).toString());
时,它没有完成剩下的数字。
这是代码https://jsfiddle.net/qLyt1yfv/
的JSFiddle
function quicksort(inputArray) {
if (inputArray.length <= 1) {
return inputArray;
} else {
var left_subarray = [];
var right_subarray = [];
var newArray = [];
var pivot = inputArray.pop();
var length = inputArray.length;
for (var i = 0; i < length; i++) {
if (inputArray[i] <= pivot) {
left_subarray.push(inputArray[i]);
} else {
right_subarray.push(inputArray[i]);
}
}
return newArray.concat(quicksort(left_subarray), pivot, quicksort(right_subarray));
}
}
var input = [51, 42, 96, 83, 37, 5, 24];
var resultArray = quicksort(input);
console.log(quicksort(input).toString());
console.log("Result Array: " + resultArray);
document.getElementById('result').innerHTML = resultArray.toString();
&#13;
<h1 id="result">Quicksort: </h1>
&#13;
答案 0 :(得分:0)
执行以下操作时:
var pivot = inputArray.pop();
您通过删除最后一个元素来修改原始数组。
您可以通过在执行排序之前执行原始数组的副本,或者在返回结果之前将元素推回到数组来解决此问题:
inputArray.push(pivot);
答案 1 :(得分:0)
将inputArray传递给quicksort函数并通过inputArray.pop()
删除它的元素您不应该传递输入数组,只需传递此数组的副本