采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我照着视频敲得代码,执行后报错“超出最大调用堆栈大小"”,这是为什么:
left 或者 right 数组长度可能会为 0 ,所以 ```js
if(arr.length === 1) return arr
需要改成if(arr.length < 2) return arr
```
正解nice
Array.prototype.quickSort = function () {
const rec = (arr) => {
if (arr.length < 2) {
return arr;
}
const left = [];
const right = [];
const mid = arr[0];
for (let i = 1; i < arr.length; i++) {
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
});
return res;
const arr = [2, 3, 99, 5, 6];
let sortArr=arr.quickSort();
console.log(sortArr);
在循环处加一个debugger,断点调试一下
出现了死循环,你在所有循环处加一个断点看看
我也知道是递归死循环了,看不出怎么修改,我以为是自己问题,就照着视频重新敲的,还是报错,老师能不能看看代码具体错在哪里?
所以我让你加个断点看下,从哪个逻辑开始死循环的
if (arr.length <= 1) return arr
登录后可查看更多问答,登录/注册
夯实算法基础,填补技术短板,助力面试考题最后一公里
1.4k 10
971 9
888 8
890 8
1.1k 7