Java Selection Sort选择排序实现10整数升序首元素排序错误如何修复
选择排序代码修复方案
核心问题原因
- 内层循环
j从1开始遍历,永远不会和索引为0的第一个元素做比较,直接导致第一个元素无法参与排序 - 比较逻辑写反:
array[i] < array[j]就交换的逻辑是实现降序,不符合你需要的升序要求 - 逻辑结构问题:边输入边排序时数组还未填充完成,剩余的默认0值会干扰排序结果,且不符合选择排序的标准实现逻辑
修复后完整代码
import java.util.Scanner; public class SelectionSort { public static void sort(int[] array) { Scanner sc = new Scanner(System.in); System.out.println("请输入10个整数:"); // 先完成所有输入 for (int i = 0; i < array.length; i++) { System.out.print((i+1) + ": "); array[i] = sc.nextInt(); } // 标准选择排序实现升序 for (int i = 0; i < array.length - 1; i++) { // 记录最小值下标 int minIndex = i; // 遍历未排序区间找最小值 for (int j = i + 1; j < array.length; j++) { if (array[j] < array[minIndex]) { minIndex = j; } } // 交换最小值到已排序区间末尾 int temp = array[minIndex]; array[minIndex] = array[i]; array[i] = temp; } // 输出排序结果 System.out.println("升序排序结果:"); for (int a = 0; a < array.length; a++) { System.out.print(array[a] + " "); } sc.close(); } public static void main(String[] args) { int[] my_array = new int[10]; sort(my_array); } }
修复说明
- 先接收完所有输入再执行排序,避免未填充的默认值干扰排序
- 内层循环从
i+1开始遍历未排序区间,所有元素都能参与比较 - 按照标准选择排序逻辑实现,每轮先找最小值下标再交换,效率更高且逻辑清晰
- 比较逻辑改为判断
array[j] < array[minIndex],实现升序排序
内容的提问来源于stack exchange,提问作者meohyun24
相关产品推荐
相关产品推荐

