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

为什么我的选择排序(Selection Sort)程序无法正常运行?

选择排序代码问题分析与修正

你这段选择排序代码无法正常工作的核心原因是:你只保存了最小值的数值,却没记录它在数组中的索引位置。

举个具体例子:第一次外层循环i=0时,arr[i]是5,遍历后smallest拿到了最小值1,但你不知道这个1是在数组的索引2位置。执行交换时,你只是把arr[0]改成了1,但原数组中索引2的1还留在原地,此时数组变成[1,4,1,3,2],后续循环逻辑直接混乱。

正确的做法应该是记录最小值的索引,通过索引找到对应的元素再交换,这样才能真正把最小值放到当前i的位置,同时把原arr[i]放到最小值原来的位置。

修正后的代码如下:

public class first {
    public static void main(String args[]){
        int arr[]={5,4,1,3,2};

        for(int i=0; i<arr.length-1;i++){
            int minIndex = i; // 记录最小值的索引,初始为当前i的位置
            for(int j=i+1; j<arr.length;j++){
                if(arr[minIndex] > arr[j]){
                    minIndex = j; // 更新最小值的索引
                }
            }
            // 交换当前i位置和最小值索引位置的元素
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
        
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}

这段代码运行后会输出正确的排序结果:1 2 3 4 5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:01:06