JavaScript快速排序数组代码问题排查及修复
代码问题分析与修复
存在的问题
- 交换逻辑完全错误:你每次找到最小值后,先把最小值塞到数组首位,再把当前
j位置的元素放到最小值原位置,这会直接打乱已经排好的元素(比如第一轮排好的首位元素,第二轮会被强制替换)。 - 最小值查找范围错误:内层循环每次都从数组开头(
i=0)找最小值,而非从当前外层循环的j位置开始,导致重复处理已经排好序的元素。 - 函数名与实现不符:函数命名为
quickSort,但实际写的是选择排序的思路,容易造成混淆。 - 初始逻辑本身不成立:你描述的“每个元素与首个元素比较,小就交换”的逻辑,只能把比首个元素小的元素换到前面,根本无法实现整体有序。
修复后的代码
按照选择排序的正确逻辑修改:每一轮为当前位置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
相关产品推荐
相关产品推荐

