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

如何在JavaScript中对数组升序排序?我的选择排序代码失效

你的选择排序JavaScript代码问题分析及修复

代码存在的核心问题:

  • 内层循环起始位置错误:选择排序中,外层循环到第x位时,前x个元素已经是有序的,内层循环应该从x+1开始遍历剩余未排序元素,而不是从0开始重复比较已排序部分。
  • 比较逻辑颠倒:你要找的是未排序部分的最小值,应该判断array[y] < array[min],而不是array[y] > array[min],否则会找到最大值,变成反向的选择排序操作。
  • 交换时机错误:每次找到更小元素后立刻交换是错误的,正确逻辑是先遍历完整个未排序部分,确定最小值的索引min后,再将array[x]和array[min]交换一次即可,频繁交换会打乱已排序部分。
  • return语句错误:JavaScript中逗号运算符会返回最后一个表达式的值,return array, size;实际返回的是size,而非排序后的数组,应该直接返回array。
  • 变量声明不规范:使用var会导致变量提升,建议改用let/const限定变量作用域,避免意外问题。

修正后的代码:

function selection(array, size) {
  let x;
  let y;
  let min;

  for (x = 0; x < size - 1; x++) {
    min = x;
    // 从x+1开始遍历未排序部分
    for (y = x + 1; y < size; y++) {
      // 确定最小值的索引
      if (array[y] < array[min]) {
        min = y;
      }
    }
    // 遍历完成后执行一次交换
    let z = array[min];
    array[min] = array[x];
    array[x] = z;
  }
  return array;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:15:47