控制台日志记录快速排序会减少排序

时间:2017-10-03 01:47:10

标签: javascript quicksort console.log

我刚刚经历了一些练习问题以便在排序时刷新,我遇到了这个问题?

我快速排序数组,当我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;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

执行以下操作时:

var pivot = inputArray.pop();

您通过删除最后一个元素来修改原始数组。

您可以通过在执行排序之前执行原始数组的副本,或者在返回结果之前将元素推回到数组来解决此问题:

inputArray.push(pivot);

答案 1 :(得分:0)

将inputArray传递给quicksort函数并通过inputArray.pop()

删除它的元素

您不应该传递输入数组,只需传递此数组的副本