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

JavaScript快速排序数组代码问题排查及修复

代码问题分析与修复

存在的问题

  1. 交换逻辑完全错误:你每次找到最小值后,先把最小值塞到数组首位,再把当前j位置的元素放到最小值原位置,这会直接打乱已经排好的元素(比如第一轮排好的首位元素,第二轮会被强制替换)。
  2. 最小值查找范围错误:内层循环每次都从数组开头(i=0)找最小值,而非从当前外层循环的j位置开始,导致重复处理已经排好序的元素。
  3. 函数名与实现不符:函数命名为quickSort,但实际写的是选择排序的思路,容易造成混淆。
  4. 初始逻辑本身不成立:你描述的“每个元素与首个元素比较,小就交换”的逻辑,只能把比首个元素小的元素换到前面,根本无法实现整体有序。

修复后的代码

按照选择排序的正确逻辑修改:每一轮为当前位置j找到剩余元素中的最小值,直接与arr[j]交换,保证每轮结束后j位置是有序的。

const arr = [5,3,2,6,1];

const selectionSort = (arr) => {
  // 外层循环:确定当前要放置最小值的位置
  for(let j = 0; j < arr.length; j++) {
    let minIndex = j; // 初始假设当前位置元素是最小值
    // 内层循环:从j开始往后找真正的最小值索引
    for(let i = j + 1; i < arr.length; i++) {
      if(arr[i] < arr[minIndex]) {
        minIndex = i;
      }
    }
    // 交换当前位置和最小值位置的元素
    const tmp = arr[j];
    arr[j] = arr[minIndex];
    arr[minIndex] = tmp;
  }
  return arr;  
}

console.log(selectionSort(arr), 'res') // 输出 [1,2,3,5,6] 'res'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:31:22