报错 RangeError: Maximum call stack size exceeded
来源:11-6 JavaScript 实现:快速排序
修船蛆宝宝
2020-10-12
Array.prototype.quickSort = function () {
const rec = (arr) => {
if (arr.length === 1) { return arr; }
const left = [];
const right = [];
const mid = arr[0];
for (let i = 1; i < arr.length; i += 1) {
if (arr[i] < mid) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return [...rec(left), mid, ...rec(right)];
};
const res = rec(this);
res.forEach((n, i) => { this[i] = n });
};
// const arr = [2, 4, 5, 3, 1];
const arr = [34, 17, 77, 11, 56, 56, 9, 66, 31, 77];
arr.quickSort();
console.log(arr);
运行后输出 RangeError: Maximum call stack size exceeded
写回答
1回答
-
修船蛆宝宝
提问者
2020-10-12
调试后发现 如果left数组或者right数组为空时会死循环,需要将 if (arr.length === 1) { return arr; } 改为
if (arr.length <= 1) { return arr; }
732021-03-26
相似问题