【问题标题】:JavaScript quickSort wrong outputJavaScript quickSort 错误输出
【发布时间】:2021-10-01 17:11:24
【问题描述】:

这是我写的快速排序算法:

var arr = [0, 2, 5, 10, 3, 22, 12, 8, 20];

let quickSort = (arr) => {
  let len = arr.length;

  if (len === 1) {
    return arr;
  };

  let pivot = arr.length - 1;

  const rightArr = [];
  const leftArr = [];

  for (let i = 0; i < len - 1; i++) {
    let j = i + 1;
    if (arr[j] > arr[pivot]) {
      rightArr.push(arr[j]);
    } else {
      leftArr.push(arr[j]);
    };
  };
  if (leftArr.length > 0 && rightArr.length > 0) {
    return [...quickSort(leftArr), pivot, ...quickSort(rightArr)];
  } else if (leftArr.length > 0 && rightArr.length <= 0) {
    return [...quickSort(leftArr), pivot];
  } else {
    return [pivot, ...quickSort(rightArr)];
  };
};

console.log(quickSort(arr));

输出为:[20, 1, 2, 3, 4, 5, 6, 8, 22]

我的问题是:为什么我会得到错误的输出以及如何解决这个问题?

【问题讨论】:

  • for 循环跳过 arr[0]
  • fwiw,快速排序应该就地对数组进行排序。 Posted 函数通过复制到新数组中来创建新的子数组,而真正的快速排序不会这样做。
  • 这段代码有很多问题,但问题是在列表中添加pivot而不是arr[pivot],pivot是索引
  • 谢谢@Vulwsztyn,我解决了问题,一切正常。
  • 因为我显然解决了您的问题,所以我添加了我的评论作为答案。你介意接受吗?

标签: javascript algorithm sorting quicksort


【解决方案1】:

这段代码有很多错误,但问题在于将pivot 添加到列表中而不是arr[pivot]pivot 是索引

【讨论】:

  • 例如:代码末尾的所有条件都是多余的,为什么要在js中使用分号?这不是真正的原位快速排序,因为您应该交换数组的元素而不是创建其他元素
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多