首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持“快速排序”算法

支持“快速排序”算法
EN

Stack Overflow用户
提问于 2021-03-07 10:45:44
回答 3查看 59关注 0票数 3

我的快速排序算法实现(使用递归)有问题。当我在带有重复号的数组上使用函数时,在最终结果中忽略了这些数字,我不知道为什么。有人知道我做错了什么吗?(JavaScript)

代码语言:javascript
复制
function getRandomInt(max) {
  return Math.floor(Math.random() * Math.floor(max));
}

let quickSort = (arr) => {
    if (arr.length <= 1) return arr;
    
    const pivot = arr[getRandomInt(arr.length)]
    let smallerArr = [];
    let greaterArr = [];
    
    for (let item of arr) {
        if (item !== pivot) {
            if (item > pivot) {
                greaterArr.push(item);
                continue
            }
            smallerArr.push(item);
        }
        
    }
    let sorted = quickSort(smallerArr);
    sorted = sorted.concat([pivot],quickSort(greaterArr));
    console.log(sorted);
    return sorted;
}
quickSort([5,7,6,23,6]);
EN

回答 3

Stack Overflow用户

发布于 2021-03-07 13:07:52

您只想跳过其pivotIndex与当前index匹配的元素。我转而使用for(let i = 0,index......)方法来跟踪相同的信息。您当前要做的是跳过所有与匹配的项,这意味着如果pivot元素在数组中有重复的,也将从考虑的复制项中删除

代码语言:javascript
复制
function getRandomInt(max) {
  return Math.floor(Math.random() * Math.floor(max));
}

let quickSort = (arr) => {
    if (arr.length <= 1) return arr;
    
    const pivotIndex = getRandomInt(arr.length);
    const pivot = arr[pivotIndex];
    let smallerArr = [];
    let greaterArr = [];
    for(let index = 0;index<arr.length;index++)
    {
            if(index===pivotIndex)
               continue;
            const item = arr[index];   
            if (item > pivot) 
            greaterArr.push(item);
            else 
            smallerArr.push(item);
    }
    let sorted = quickSort(smallerArr);
    sorted = sorted.concat(pivot,quickSort(greaterArr));
    console.log(sorted);
    return sorted;
}
quickSort([5,7,6,23,6,6,6,6]);

票数 3
EN

Stack Overflow用户

发布于 2021-03-07 10:51:07

如果item !== pivot是假的,会发生什么?你好像跳过那件事了。

票数 0
EN

Stack Overflow用户

发布于 2021-03-07 12:53:54

您需要清楚地说明在项目===支点时您的代码应该做什么。现在,您的代码只是忽略了这些值,因为它没有在greaterArr和smallerArr上插入。添加一个else语句来解决这个问题。

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

https://stackoverflow.com/questions/66515619

复制
相关文章

相似问题

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