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

快速排序算法If/else逻辑问题:重复值丢失与性能疑问

关于快速排序的两个问题:重复值丢失与性能低下的原因

一、独立if写法导致重复值丢失的原因

你的初始代码里,两个独立的if只处理了小于pivot和大于pivot的元素:

if (array[i] < pivot) {
    less.push(array[i]);
} 
if (array[i] > pivot) {
    greater.push(array[i])
}

当元素值等于pivot时,两个条件都不成立,这个元素既不会被加入less也不会进入greater,直接被丢弃。

比如测试数组[2, 1, 2],pivot是中间的1,最后一个2既不小于也不大于1,循环结束后这个元素就消失了,最终排序结果少了一个2。

改成if/else后,else会覆盖所有不小于pivot的情况(包含等于),等于pivot的元素会被加入greater数组,最终所有元素都能被保留到结果里。

二、该快排实现性能低下的原因

这个版本的快速排序比选择、冒泡还慢,核心问题出在两点:

  • 非原地排序的额外开销:每次递归都要新建less、greater两个数组,最后还要用展开运算符...合并数组,这些操作会产生大量内存复制,带来极高的时间损耗。而标准快速排序是原地排序,通过分区(partition)操作在原数组内交换元素,不需要额外创建数组,内存和时间效率远高于这种实现。
  • 递归树不平衡导致时间复杂度退化:你选择数组中间元素作为pivot,但如果数组本身接近有序(比如升序/降序),这种选择和选首尾元素没有区别,会让递归树严重失衡,递归深度变成O(n),时间复杂度直接退化成O(n²)——和冒泡、选择排序处于同一量级。但因为你的实现多了数组复制的额外开销,实际运行速度反而更慢。

加continue解决不了问题,因为本质性能瓶颈不是循环判断次数,而是数组复制和递归结构的不平衡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:22:34