let quickSort = (arr) => {
let pivot = arr[arr.length - 1];
const rightArr = [];
const leftArr = [];
for(let i = 0; i < arr.length - 1 ; i++){
if (arr[i] > pivot){
rightArr.push(arr[i]);
}else{
leftArr.push(arr[i]);
};
};
if (leftArr.length > 0 && rightArr.length > 0 ){
return [...quickSort(leftArr) , pivot , ...quickSort(rightArr)];
}else if (leftArr.length > 0){
return [...quickSort(leftArr) , pivot];
}else {
return [pivot ,...quickSort(rightArr)];
};
};
quickSort(arr);
为什么超过了最大调用堆栈大小(递归函数仍然存在问题)
1条答案
按热度按时间vshtjzan1#
在…内
quickSort
您有以下代码:上面说:
如果项目同时位于左侧和右侧,则对这两个项目进行排序
否则,如果左侧有项目,则向左排序
否则,请向右排序
您的逻辑错误如下:您没有处理简单的情况,即leftarr和rightarr的长度都不大于0。您还需要处理这个问题
下面的代码修复了一个错误。我并不认为您的代码在以后会正常工作,但下面的代码解决了上述逻辑问题:
我在评论中说,您需要计算枢轴。有多种可能的方法可以做到这一点,请参阅https://javascript.plainenglish.io/quick-sort-algorithm-in-javascript-5cf5ab7d251b
但第一件事是:您需要首先解决stackoverflow问题,确保在任何情况下都不会无限次地调用函数本身,直到浪费足够的资源以使应用程序崩溃。