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

实现Selection sort选择排序算法部分测试用例运行错误如何解决

问题根因

你的选择排序实现的核心错误是交换操作的执行时机不对:exch(a,i,min)被写在了内层遍历循环的内部,每对比一个元素就会执行一次交换,完全不符合选择排序的设计逻辑。
选择排序的正确逻辑是:对每一位位置i,先完整遍历i之后的所有剩余元素,找到剩余元素里最小的那个的下标min,全程仅做下标更新,等遍历完所有剩余元素找到真正的最小值位置后,仅执行一次交换把最小值放到i的位置即可。

修正后的代码

你只需要把exch(a,i,min)移出内层循环即可,完整的sort方法如下:

public static void sort(Comparable[] a) {
    int N = a.length;
    for(int i = 0; i < N; i++) {
        int min = i;
        // 内层循环仅更新最小值下标,不交换
        for(int j = i + 1; j < N; j++) {
            if(less(a[j], a[min])) 
                min = j;
        }
        // 找到当前区间最小值后,仅交换一次
        exch(a, i, min);
    }
}

验证结果

修正后两个测试用例都可以得到正确的升序排序结果:

  • 用例1{100,90,6,43,12,1}排序结果为{1,6,12,43,90,100}
  • 用例2{100,90,6,43,12,7}排序结果为{6,7,12,43,90,100}

内容的提问来源于stack exchange,提问作者Kumar_Maddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:57:03