Java数组排序冒泡排序

一、分析下边冒泡排序的运行过程:

package com.itheima;

public class Example24 {

public static void main(String[] args) {

    int[] arr = { 9, 8, 3, 5, 2 };

    // 1、冒泡排序前,先循环打印数组元素

    for (inti = 0; i < arr.length; i++) {

       System.out.print(arr[i] + " ");

    }

    System.out.println(); // 用于换行

    // 2、进行冒泡排序

    // 2.1、外层循环定义需要比较的轮数(两数对比,要比较n-1轮)

    for (int  i= 1; i < arr.length; i++) {

       // 2.2、内层循环定义第i轮需要比较的两个数

       for (intj = 0; j < arr.length -i; j++) {

           if (arr[j] > arr[j + 1]) { // 比较相邻元素

               // 下面的三行代码用于相邻两个元素交换

               inttemp = arr[j];

               arr[j] = arr[j + 1];

               arr[j + 1] = temp;

           }

       }

    }

    // 3、完成冒泡排序后,再次循环打印数组元素

    for (inti = 0; i < arr.length; i++) {

       System.out.print(arr[i] + " ");

    }

}

}

分析过程要求如下:

1、排序过程中,

当i=0时,j是怎样循环的,得到的排序状态是啥;

当i=1时,j是怎样循环的,得到的排序状态是啥;

……

当i=?时,循环结束。

img


这样吗

在循环内打印输出每一次的排序结果。
j的循环次数是arr.length -i次。
外层循环控制行数,内层循环控制比较的次数。
每一轮内循环都将前面大的数依次放在最后面。

public class Main {
    public static void main(String[] args) {
        int[] arr = { 9, 8, 3, 5, 2 };
        // 1、冒泡排序前,先循环打印数组元素
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println(); // 用于换行
        // 2、进行冒泡排序
        // 2.1、外层循环定义需要比较的轮数(两数对比,要比较n-1轮)
        for (int  i= 1; i < arr.length; i++) {
            // 2.2、内层循环定义第i轮需要比较的两个数
            for (int j = 0; j < arr.length -i; j++) {
                if (arr[j] > arr[j + 1]) { // 比较相邻元素
                    // 下面的三行代码用于相邻两个元素交换
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            System.out.println("第"+i+"次排序后的结果:"+Arrays.toString(arr));
        }
        // 3、完成冒泡排序后,再次循环打印数组元素
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

img

这种东西还是自己debug看吧。看不懂的话 可以尝试把数组的变化写下来,然后找规律。