Javascript JS;有人能纠正我的快速排序功能吗?

Javascript JS;有人能纠正我的快速排序功能吗?,javascript,recursion,quicksort,Javascript,Recursion,Quicksort,我仍然难以使用递归调用。 我的函数超出了最大调用堆栈。需要帮忙吗 function quickSort(arr) { let n = arr[arr.length-1]; const inf = []; const sup = []; for(let i = 0; i<arr.length; i++){ if(arr[i]<= n){inf.push(arr[i])} else(sup.push(arr[i]));

我仍然难以使用递归调用。 我的函数超出了最大调用堆栈。需要帮忙吗

function quickSort(arr) {
    let n = arr[arr.length-1];
    const inf = [];
    const sup = [];
    for(let i = 0; i<arr.length; i++){
        if(arr[i]<= n){inf.push(arr[i])}
        else(sup.push(arr[i]));
    }
    if(inf.length === 1 && sup.length === 1){
        return inf.concat(sup)
    }else if(inf.length === 1 && sup.length > 1){
        quickSort(sup);
        return inf.concat(sup)
    }else if(inf.length > 1 && sup.length === 1){
        quickSort(inf);
        return inf.concat(sup)
    }else{
        quickSort(inf);
        quickSort(sup);
        return inf.concat(sup)
    }
  }
函数快速排序(arr){
设n=arr[arr.length-1];
常量inf=[];
常量sup=[];
for(设i=0;i 1&&sup.length==1){
快速排序(inf);
返回inf.concat(sup)
}否则{
快速排序(inf);
快速排序(sup);
返回inf.concat(sup)
}
}

谢谢。

让我们以数组为例
arr=[3,2,7,5,4,6]
。 在第一个递归调用中

inf = [3,2,7,5,4,6]
sup = [7]
现在,由于
sup.length===1
inf.length>1
,执行将进入第三个if-else条件。在这个递归调用中,我们有

inf = [3,2,5,4,6] // Same as the original array sent into parameter
sup = []
这基本上属于无限递归调用循环

为了从这样的无限循环中恢复,您需要添加一个条件来检查
inf.length==0
sup.length==0

可能的解决方案:在for循环中,在最后一次迭代期间,您可以检查其中一个数组是否为空,并且由于最后一次迭代将始终导致相同的情况,即在上面的代码
arr[i]=n
中,您可以将其推到空数组中,并继续执行进一步的if-else条件

考虑到前面的测试用例,在第二次迭代调用中,我将推动
6
而不是
inf[]
而是
sup[]
生成
inf[]
sup[]
数组,如下所示:

inf = [3,2,5,4]
sup = [6]
这将解决无限循环问题。

如果
inf
sup
为空,该怎么办?