【发布时间】: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