报错 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; }

7
3
慕先生5461412
俺也一样。因为可能会传入空数组。
2021-03-26
共3条回复

JavaScript版数据结构与算法 轻松解决前端算法面试

夯实算法基础,填补技术短板,助力面试考题最后一公里

2417 学习 · 670 问题

查看课程