Java冒泡排序异常:跳过数组首元素从第二位排序,求问题解决方案
问题定位
- 循环变量冲突:外层冒泡排序的控制变量为
i,后续打印数组的循环复用了该变量,打印完成后i的值被修改为数组长度n,直接导致外层排序循环仅执行1次就终止,仅完成一轮元素交换,无法完成完整排序。 - 打印位置错误:排序结果打印逻辑放在了外层排序循环内部,会每完成一轮冒泡就输出一次数组,不符合排序完成后统一输出的预期。
- 内层循环边界错误:当前内层循环判断条件为
j<limit-1,会导致数组最后两位元素无法参与比较,且未每轮缩小比较边界,存在大量无效比较。
修复方法
修改后的完整代码如下:
package exception; import java.io.*; public class Program6 { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("enter numbers: "); int n = Integer.parseInt(br.readLine()); int arr []= new int[n]; for(int i=0; i<n; i++) { System.out.print("enter int:"); arr[i] = Integer.parseInt(br.readLine()); } int limit = n-1; boolean flag = false; int temp; for (int i=0; i<limit; i++) { // 修正内层循环边界,每轮缩小比较范围 for(int j =0; j < limit - i; j++) { if(arr[j]>arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; flag = true; } } if(!flag) break; else flag=false; } // 打印逻辑移到排序循环外,且使用独立循环变量 System.out.println("sorted array: "); for(int k=0; k<n; k++) System.out.println(arr[k]); } }
核心修改点:
- 打印数组的循环改用独立变量
k,避免和外层排序的i冲突 - 将打印逻辑移到外层排序循环结束后,确保仅输出最终排序结果
- 修正内层循环边界为
j < limit - i,既保证所有元素参与比较,也减少了无效比较提升效率
内容的提问来源于stack exchange,提问作者user12864748
相关产品推荐
相关产品推荐

