You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段JavaScript快速排序方法仅返回数组中的单个元素?

分析你的快速排序代码问题

你的代码执行后只返回单个元素,主要是因为几个关键的语法和逻辑错误,我来一步步拆解:

1. 循环起始索引错误

你在循环里写了for (var i = 1; i < len; i++),但这里有个问题:你先执行了var temp = arra.pop();,这会让原数组arra的长度减少1(从原来的len变成len-1)。而循环从i=1开始,会直接跳过数组的第一个元素(索引0),导致大量元素没有被分到left或right里,最终递归的时候很多分支都是空数组,最后只剩temp被返回。

2. 数组push方法的语法错误

你写了right.push[i];,这里的语法完全错了!数组的push是方法,必须用圆括号调用,应该是right.push(arra[i]);。用方括号的话相当于访问push这个函数对象的i属性,根本没有把元素添加到right数组里,导致right一直是空的。

3. 多余的空数组newarr

你定义了var newarr = [];但完全没用到它,虽然这个不会直接导致错误,但没必要保留,直接用concat拼接排序后的左右数组和基准值就行。


修正后的代码

var arr = [4, 5, 6, 3, 4, 5, 2, 5, 6, 4, 2];
function quickSort(arra) { 
  if (arra.length <= 1) { 
    return arra; 
  } else { 
    var len = arra.length; 
    var left = []; 
    var right = []; 
    var temp = arra.pop(); 
    // 循环从i=0开始,遍历pop后的所有元素
    for (var i = 0; i < len - 1; i++) { 
      if (arra[i] < temp) { 
        left.push(arra[i]); 
      } else { 
        // 修正push的语法,用圆括号
        right.push(arra[i]); 
      } 
    } 
  } 
  // 去掉多余的newarr,直接拼接
  return quickSort(left).concat(temp, quickSort(right)); 
} 
console.log(quickSort(arr))

执行这段修正后的代码,就能得到正确的排序结果:[2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6]

内容的提问来源于stack exchange,提问作者Xinyi Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:27:38