请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

报错 RangeError: Maximum call stack size exceeded

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

正在回答 回答被采纳积分+3

1回答

提问者 修船蛆宝宝 2020-10-12 07:16:44

调试后发现 如果left数组或者right数组为空时会死循环,需要将 if (arr.length === 1) { return arr; } 改为

if (arr.length <= 1) { return arr; }

7 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信