如何移除选择排序冗余min变量 精简代码并保证程序正常运行
实现方案
你当前写的是标准选择排序逻辑,min变量的作用是暂存每轮遍历找到的最小值,但实际上你已经通过minPosition记录了最小值对应的数组索引,完全可以直接通过索引访问数组元素获取最小值,不需要额外定义min变量做中转,不会影响排序逻辑的正确性。
具体修改点
- 移除外层循环内初始化
min变量的语句 - 内层循环做大小比较时,将原逻辑中与
min的比较替换为与A[minPosition]的比较 - 移除内层循环中更新
min值的语句,仅保留minPosition的更新逻辑即可 - 元素交换的逻辑完全不需要改动,和原代码保持一致
修改后可直接运行的完整代码
int[] A = {13, 5, 2, 0, 3, 1, 21, 1, 8}; for (int k = 0; k < A.length - 1; k++) { int minPosition = k; for (int i = k + 1; i < A.length; i++) { if (A[i] < A[minPosition]) { minPosition = i; } } int temp = A[k]; A[k] = A[minPosition]; A[minPosition] = temp; } for (int i = 0; i < A.length; i++) { System.out.println(A[i]); }
逻辑等价性说明
每轮外层循环启动时,minPosition初始值为k,此时A[minPosition]就等于原逻辑中min的初始值A[k];后续遍历到更小元素时只更新最小值索引,A[minPosition]永远对应当前遍历到的最小值,和原逻辑中min存储的值完全一致,排序结果不会有任何偏差,运行后将按升序输出0、1、1、2、3、5、8、13、21。
内容的提问来源于stack exchange,提问作者wister13
相关产品推荐
相关产品推荐

