为什么我的选择排序(Selection Sort)程序无法正常运行?
选择排序代码问题分析与修正
你这段选择排序代码无法正常工作的核心原因是:你只保存了最小值的数值,却没记录它在数组中的索引位置。
举个具体例子:第一次外层循环i=0时,arr[i]是5,遍历后smallest拿到了最小值1,但你不知道这个1是在数组的索引2位置。执行交换时,你只是把arr[0]改成了1,但原数组中索引2的1还留在原地,此时数组变成[1,4,1,3,2],后续循环逻辑直接混乱。
正确的做法应该是记录最小值的索引,通过索引找到对应的元素再交换,这样才能真正把最小值放到当前i的位置,同时把原arr[i]放到最小值原来的位置。
修正后的代码如下:
public class first { public static void main(String args[]){ int arr[]={5,4,1,3,2}; for(int i=0; i<arr.length-1;i++){ int minIndex = i; // 记录最小值的索引,初始为当前i的位置 for(int j=i+1; j<arr.length;j++){ if(arr[minIndex] > arr[j]){ minIndex = j; // 更新最小值的索引 } } // 交换当前i位置和最小值索引位置的元素 int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } }
这段代码运行后会输出正确的排序结果:1 2 3 4 5。
内容的提问来源于stack exchange,提问作者Sidharth sharma
相关产品推荐
相关产品推荐

