
本文详解 selection sort 在 javascript 中常见实现错误——仅记录最小值却未正确交换位置,导致数组被错误覆盖为重复值;提供标准、可运行的修复版本及关键原理说明。
本文详解 selection sort 在 javascript 中常见实现错误——仅记录最小值却未正确交换位置,导致数组被错误覆盖为重复值;提供标准、可运行的修复版本及关键原理说明。
Selection Sort(选择排序)的核心思想是:每一轮遍历未排序部分,找到其中最小(或最大)元素的索引,然后将其与当前轮起始位置的元素交换。原代码的问题在于:内层循环只保存了最小值 cur = a[j],却丢失了该最小值在原数组中的位置信息;后续交换时又错误地用 cur(值)直接覆盖 a[i],同时未将原 a[i] 的值写回 minIndex 对应位置,最终造成多个位置被赋值为同一最小值(如 [1,1,1])。
正确的实现必须维护最小元素的索引(而非仅其值),并在外层循环末尾执行标准三步交换:
function selectionSort(a) {
for (let i = 0; i <p>⚠️ 关键注意事项: </p>
- 勿混淆“值”与“索引”:cur = a[j] 只存值,无法定位原位置;必须用 minIndex 记录下标才能精准交换;
- 交换逻辑必须双向:先暂存 a[i],再将 a[minIndex] 赋给 a[i],最后把暂存值赋给 a[minIndex];
- 边界控制:外层循环只需到 a.length - 1,因最后一个元素自然有序;
- 稳定性无关:Selection Sort 是不稳定排序,但本实现确保功能正确性优先。
该算法时间复杂度恒为 O(n²),空间复杂度 O(1),适合教学理解或小规模数据场景。掌握索引驱动的交换逻辑,是避免此类“值覆盖陷阱”的根本。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











