Selection Sort(选择排序)数组排序代码无法正常排序问题求助
选择排序代码错误排查
错误原因
你的代码核心问题是交换逻辑的位置放置错误。
选择排序的标准执行流程为:
- 遍历整个未排序区间,先确定区间内最小值的下标
- 待完整遍历完未排序区间后,再将最小值和未排序区间的首个元素交换
你将交换逻辑写在了内层遍历的循环体内部,每比较一个元素就触发一次交换,还未确定整个未排序区间的最小值就提前改动了数组元素位置,最终导致排序结果异常。
修正后的代码
只需要将交换逻辑移动到内层循环结束之后即可,修正后的selectionSort方法如下:
public static void selectionSort(int[] arr) { int n = arr.length; // 逐个移动未排序子数组的边界 for (int i = 0; i < n - 1; i++) { // 查找未排序区间的最小值下标 int min = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min]) { min = j; } } // 找到最小值后再执行交换 int temp = arr[min]; arr[min] = arr[i]; arr[i] = temp; } }
修正后运行代码即可得到正确的升序排序结果:2 5 6 7 14 17 19 20 22 39 42 46 47 48 51。
内容的提问来源于stack exchange,提问作者RaVeN
相关产品推荐
相关产品推荐

