You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:06:02