Javascript 在Js中快速排序中使用for循环

Javascript 在Js中快速排序中使用for循环,javascript,quicksort,Javascript,Quicksort,我正在编写快速排序算法,当我测试代码时,结果让我感到困惑 RangeError:超过最大调用堆栈大小 at Array.push() 设arr=[0,-1,1,0,1,-1100,23,17,56,39,47,23,-34,-56] export default function quickSort(array){ let len = array.length; if(len <= 1) return array; let piviot = array.pop()

我正在编写快速排序算法,当我测试代码时,结果让我感到困惑

RangeError:超过最大调用堆栈大小 at Array.push()

设arr=[0,-1,1,0,1,-1100,23,17,56,39,47,23,-34,-56]

export default function quickSort(array){
    let len = array.length;
    if(len <= 1) return array;

    let piviot = array.pop();

    let left = [], right = [];
    for (let i = 0; i < len; i++) {
        if(array[i] < piviot){
            left.push(array[i]);
        }
        else{
            right.push(array[i])
        }
    }
    return quickSort(left).concat(piviot,quickSort(right));
}
导出默认函数快速排序(数组){
设len=array.length;

如果(len这将作为
piviot=array.pop();
更改导致问题的数组大小而工作

export default function quickSort(array){
    let len = array.length;
    if(len <= 1) return array;

    let piviot = array.pop();
    len = array.length;
    let left = [], right = [];
    for (let i = 0; i < len; i++) {
        if(array[i] < piviot){
            left.push(array[i]);
        }
        else{
            right.push(array[i])
        }
    }
    return quickSort(left).concat(piviot,quickSort(right));
}
导出默认函数快速排序(数组){
设len=array.length;

如果(len我不会为您编写快速排序算法,但我会解释其行为:

  • 为什么第一段代码溢出堆栈
  • 这在永不结束的递归函数中非常常见。你永远不会达到神奇的程度

    if(len <= 1) return array;
    

    if(len)在高度引用的语言(如javascript)上实现基本算法将被证明是有问题的……这是简短的答案
    
    if(len <= 1) return array;