冒泡排序(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
相关产品推荐
相关产品推荐

