如何在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
相关产品推荐
相关产品推荐

