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

冒泡排序(Bubble Sort)函数无法对给定数组排序求助

排查冒泡排序未生效的问题

嘿,我一眼就瞅见你代码里的关键问题了——内层循环的变量完全写错了,这直接导致你的排序逻辑根本没跑起来,数组自然还是原样子。咱们一步步拆解:

核心错误:内层循环的变量混乱

看你这段内层循环代码:

for (int j = 0; i < sorted.length - i - 1; i++)

这里有两个致命问题:

  • 循环条件里误用了i而非j,正确判断应该是j < sorted.length - i - 1,不然循环的触发逻辑完全不对
  • 循环增量写的是i++,而不是j++——你这相当于在内层循环里直接修改外层循环的计数器,外层循环会瞬间走到终点,排序的交换代码一次都没执行

次要优化点:数组引用的赋值

你写的int [] sorted = array;只是把原数组的引用赋值给了sorted变量,并不是创建新数组。如果你的需求是不修改原数组,最好改成复制数组:

int[] sorted = Arrays.copyOf(array, array.length);

当然这个不是这次排序失效的原因,但属于代码规范的优化点,能避免不小心修改原数组的副作用。

调用代码的小细节

你的调用代码里,sort_array(array);返回了排序后的数组,但你没接收这个返回值,直接打印原数组。如果用了复制数组的写法,应该改成接收返回值再打印:

int[] array = { 20, 5, 1, 6, 23, 52, 15, 12 };
int[] sortedArray = sort_array(array);
return_list(sortedArray);

修正后的完整排序方法

import java.util.Arrays; // 别忘了导入Arrays类

public static int[] sort_array(int[] array) {
    // 复制原数组,避免修改原数组
    int [] sorted = Arrays.copyOf(array, array.length);
    int temp = 0;
    for (int i = 0; i < sorted.length - 1; i++) {
        // 修正后的内层循环
        for (int j = 0; j < sorted.length - i - 1; j++) {
            if (sorted[j] > sorted[j + 1]) {
                temp = sorted[j];
                sorted[j] = sorted[j + 1];
                sorted[j + 1] = temp;
            }
        }
    }
    return sorted;
}

这样修改后,你的冒泡排序就能正常工作,输出排序后的数组了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:06:01