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

数组最小值交换升序排序的代码逻辑不符问题及修正需求

问题分析与修正方案

你的代码确实能实现升序排序,但用的是相邻元素逐次交换的逻辑(类似冒泡排序),和要求的“先找最小值、再单次交换”的选择排序逻辑不符。

原代码的问题点

当前嵌套循环里,只要发现array[i]比array[k]大就立刻交换,这会导致每一轮未排序区间里,只要遇到更小的元素就做一次交换,而不是先找到整个未排序区间的最小值,再做一次交换操作。

指定逻辑的核心(选择排序)

要求的步骤本质是选择排序的标准流程:

  • 每一轮只关注当前未排序区间的起始位置i
  • 先遍历i到数组末尾的所有元素,找到其中最小值的索引(记住位置,不是直接交换)
  • 遍历结束后,把最小值和array[i]交换(如果最小值不在i位置的话)
  • 然后i后移,重复直到排序完成

修正后的代码

public static int[] swapLowest(int[] array) {
    // 外层循环:当前要放置最小值的位置
    for (int i = 0; i < array.length; i++) {
        int minIndex = i; // 先假设当前位置就是最小值的索引
        // 内层循环:遍历未排序区间,找到最小值的索引
        for (int k = i + 1; k < array.length; k++) {
            if (array[k] < array[minIndex]) {
                minIndex = k; // 更新最小值的索引
            }
        }
        // 找到最小值后,只做一次交换(如果最小值不在当前位置)
        if (minIndex != i) {
            int temp = array[i];
            array[i] = array[minIndex];
            array[minIndex] = temp;
        }
    }
    return array; // 原代码遗漏了返回语句,需要补上
}

代码解释

  1. 外层循环i标记当前要确定的位置,也就是把未排序区间的最小值放到这里
  2. 内层循环只负责查找最小值的位置,全程不做交换,只更新minIndex
  3. 内层循环结束后,判断最小值是否已经在i位置:如果不在,才执行一次交换
  4. 补上原代码缺失的return array,保证方法返回排序后的数组

这样修改后,就完全符合你指定的“先找最小值、再交换、移动索引、重复”的逻辑了。

内容的提问来源于stack exchange,提问作者Dumb Hacker Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:55:24