首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >quickSort算法错误

quickSort算法错误
EN

Stack Overflow用户
提问于 2021-07-12 11:53:53
回答 1查看 60关注 0票数 0
代码语言:javascript
复制
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);

为什么最大调用堆栈大小超过了(递归函数仍然存在问题)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 12:26:15

quickSort内部,您有以下代码:

代码语言:javascript
复制
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)];
};

上面写着:

如果在左边和右边都有项目,则对both

  • otherwise,进行排序,如果在左边有项,则排序到左

  • ,否则将排序到右

您的逻辑错误如下:--您不处理琐碎的情况,也就是说,leftArr和rightArr的长度都不大于0。您也需要处理这个问题,

下面的代码修复了一个错误。我并不认为您的代码将在之后正确工作,但是下面的代码解决了上面描述的逻辑问题:

代码语言:javascript
复制
//calculate pivot

if (leftArr.length > 0 && rightArr.length > 0 ){
    return [...quickSort(leftArr) , pivot , ...quickSort(rightArr)];
}else if (leftArr.length > 0){
    return [...quickSort(leftArr) , pivot]; 
}else if (rightArr.length > 0){
    return [pivot ,...quickSort(rightArr)];
}else {
    return pivot;
};

我在评论中说,你需要计算枢轴。有多种可能的方法可以这样做,请参阅https://javascript.plainenglish.io/quick-sort-algorithm-in-javascript-5cf5ab7d251b

但是第一件事是:首先需要修复堆栈溢出问题,确保在任何情况下函数都不会无限多次地调用自己,直到浪费足够的资源才能使应用程序崩溃。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68346939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档