一、思路

3 9 -1 1 20
  1. 第一轮遍历每次取下标为i 和 i+1 的两个数进行比较
3 9 -1 1 20
3 -1 9 1 20
3 -1 1 9 20
3 -1 1 9 20
  1. 接着上面进行第二轮遍历每次取下标为i 和 i+1 的两个数进行比较
-1 3 1 9 20
-1 1 3 9 20
-1 1 3 9 20
  1. 第一轮遍历每次取下标为i 和 i+1 的两个数进行比较
-1 1 3 9 20
-1 1 3 9 20
  1. 第一轮遍历每次取下标为i 和 i+1 的两个数进行比较
-1 1 3 9 20

二、结论

  1. 给出了 z 个数 咱遍历 i 次(i = z -1)。当遍历i = 0 次时,咱又遍历了 j 次(j = z - 1 - i).
         for (int i = 0; i < array.length; i++) {
             //int flag = 0;
             for (int j = 0; j < array.length -1 - i; j++) {
  2. 每次遍历取出角标为 j 和 j + 1 两个数进行比较,若前者比后者大,则进行交换,反之继续比较.
    if (array[j] > array[j + 1]){
                 int temp = 0;
                 temp = array[j];
                 array[j] = array[j + 1];
                 array[j + 1] = temp;
                 //flag++;
             }
  3. 当遍历i = n 次时,一次前者与后者的交换都没有,那么可以提前结束循环,返回数组。
    if (flag == 0){
             return array;
         }

三、代码

public class BubbleSort {

    public static void main(String[] args) {
        int[] array = new int[]{3, 9, -1, 10, 20};
        int[] sore = sore(array);
        System.out.println(Arrays.toString(sore));
    }

    public static int[] sore(int[] array) {
        for (int i = 0; i < array.length; i++) {
            int flag = 0;
            for (int j = 0; j < array.length -1 - i; j++) {
                if (array[j] > array[j + 1]){
                    int temp = 0;
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag++;
                }
            }
            if (flag == 0){
                return array;
            }
        }
        return array;
    }
}