java冒泡得不到理想结果


 public static void main(String[] args) {
        int a[] = {1, 7, 9, 4, 34, 56, 23, 57, 78, 86};
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    int tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
            for (i = 0; i < a.length; i++)
                System.out.print(a[i] + " ");
        }

为什么得不到理想的结果
最后是这样的1 7 4 9 34 23 56 57 78 86
这是什么原因

基于Monster 组和GPT的调写:
第二个for循环用来遍历整个数组并比较相邻两个元素的大小,将它们交换位置。这一步是冒泡排序算法的核心步骤。但是,根据你提供的代码,你在内层循环之外打印了数组元素,这会导致输出不正确。应该将打印的循环放在外面,而不是在内部循环中。此外,循环变量 i 在外层循环和内层循环中同时使用,会导致内层循环中的 i 覆盖了外层循环中的 i 的值,从而导致错误。可以使用不同的变量名,或者将内层循环放在一个方法中来避免这个问题。

以下是修改后的代码,将打印循环放在外面,避免了循环变量覆盖问题:

public static void main(String[] args) {
    int a[] = {1, 7, 9, 4, 34, 56, 23, 57, 78, 86};
    for (int i = 0; i < a.length - 1; i++) {
        for (int j = 0; j < a.length - 1 - i; j++) {
            if (a[j] > a[j + 1]) {
                int tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
    for (int i = 0; i < a.length; i++) {
        System.out.print(a[i] + " ");
    }
}


你最后一个遍历输出写到排序的循环里面去了改成下面这样就可以了

public static void main(String[] args) {
        int a[] = {1, 7, 9, 4, 34, 56, 23, 57, 78, 86};
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    int tmp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = tmp;
                }
            }
        }
        for (int i = 0; i < a.length; i++){
            System.out.print(a[i] + " ");
        }
    }

你最后打印结果的for循环写错位置了,放到冒泡排序第一个for循环里面了