Java300学习笔记(11)—— 冒泡排序普通版本和改进版本

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86637106

1 冒泡排序

  • 简易版本:简单
  • 优化版:减少每趟次数
  • 最终版:考虑有序,减少趟数

1.1 冒泡初级版

package day04.sort;


import java.util.Arrays;

public class BubbleSort1 {

    public static void main(String[] args) {
        int[] arr = {9, 8, 7, 6, 5};

        sort(arr);
    }

    public static void sort(int[] arr) {

        for (int j = 0; j < arr.length - 1; j++) {
            System.out.println("第 " + j + " 趟 ");
            for (int i = 0; i < arr.length - 1; i++) {
                System.out.print("第" + (i + 1) + "次");

                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }

                System.out.println(Arrays.toString(arr));
            }
        }

    }


    public static void sortSecond(int[] arr) {

        System.out.println("第二趟");
        for (int i = 0; i < arr.length - 1 - 1; i++) {
            System.out.print("第" + (i + 1) + "次");

            if (arr[i] > arr[i + 1]) {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }

            System.out.println(Arrays.toString(arr));
        }
    }

    public static void sortFirst(int[] arr) {

        System.out.println("第一趟");
        for (int i = 0; i < arr.length - 1; i++) {
            System.out.print("第" + (i + 1) + "次");

            if (arr[i] > arr[i + 1]) {
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }

            System.out.println(Arrays.toString(arr));
        }

       /* //第一趟,第一次
        int i = 0;
        if (arr[i] > arr[i + 1]) {
            int temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
        System.out.println("第一趟,第一次 "+Arrays.toString(arr));

        // 第一趟,第二次
        i++;
        if (arr[i] > arr[i + 1]) {
            int temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
        System.out.println("第一趟,第二次 "+Arrays.toString(arr));

        // 第一趟,第三次
        i++;
        if (arr[i] > arr[i + 1]) {
            int temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
        System.out.println("第一趟,第三次 "+Arrays.toString(arr));

        // 第一趟,第四次
        i++;
        if (arr[i] > arr[i + 1]) {
            int temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
        System.out.println("第一趟,第四次 "+Arrays.toString(arr));

*/
    }
}


第 0 趟 
第1次[8, 9, 7, 6, 5]
第2次[8, 7, 9, 6, 5]
第3次[8, 7, 6, 9, 5]
第4次[8, 7, 6, 5, 9]
第 1 趟 
第1次[7, 8, 6, 5, 9]
第2次[7, 6, 8, 5, 9]
第3次[7, 6, 5, 8, 9]
第4次[7, 6, 5, 8, 9]
第 2 趟 
第1次[6, 7, 5, 8, 9]
第2次[6, 5, 7, 8, 9]
第3次[6, 5, 7, 8, 9]
第4次[6, 5, 7, 8, 9]
第 3 趟 
第1次[5, 6, 7, 8, 9]
第2次[5, 6, 7, 8, 9]
第3次[5, 6, 7, 8, 9]
第4次[5, 6, 7, 8, 9]

Process finished with exit code 0

1.2 冒泡(升级版)

  • 减少每趟比较次数
package day04.sort;


import java.util.Arrays;

/*
* 第二版本,减少每一趟的次数
* */
public class BubbleSort2 {

    public static void main(String[] args) {
        int[] arr = {9, 8, 7, 6, 5};

        sort(arr);

    }

    public static void sort(int[] arr) {
        for (int j = 0; j < arr.length - 1; j++) {
            System.out.println("第 " + (j + 1) + " 趟");
            for (int i = 0; i < arr.length - 1 - j; i++) {

                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }

                System.out.print("第--" + (i + 1) + "--次");
                System.out.println(Arrays.toString(arr));
            }
        }
    }


}

第 1 趟
第--1--次[8, 9, 7, 6, 5]
第--2--次[8, 7, 9, 6, 5]
第--3--次[8, 7, 6, 9, 5]
第--4--次[8, 7, 6, 5, 9]
第 2 趟
第--1--次[7, 8, 6, 5, 9]
第--2--次[7, 6, 8, 5, 9]
第--3--次[7, 6, 5, 8, 9]
第 3 趟
第--1--次[6, 7, 5, 8, 9]
第--2--次[6, 5, 7, 8, 9]
第 4 趟
第--1--次[5, 6, 7, 8, 9]

Process finished with exit code 0

1.3 冒泡(最终版)

package day04.sort;


import java.util.Arrays;

public class BubbleSort3 {

    public static void main(String[] args) {
        int[] arr = {9, 1, 2, 3, 4};

        sort2(arr);

        System.out.println("========= Final =============");

        sortFinal(arr);

    }

    public static void sort2(int[] arr) {
        for (int j = 0; j < arr.length - 1; j++) {
            System.out.println("第 " + (j + 1) + " 趟");

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

                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }

                System.out.print("第--" + (i + 1) + "--次");
                System.out.println(Arrays.toString(arr));
            }
        }
    }

    public static void sortFinal(int[] arr) {

        boolean sorted = true;

        for (int j = 0; j < arr.length - 1; j++) {

            sorted = true; // 假设有序

            System.out.println("第 " + (j + 1) + " 趟");
            for (int i = 0; i < arr.length - 1 - j; i++) {

                System.out.print("第--" + (i + 1) + "--次");

                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;

                    sorted = false;
                }


                System.out.println(Arrays.toString(arr));
            }

            if (sorted) { // 减少趟数
                break;
            }

        }
    }
}

第 1 趟
第--1--次[1, 9, 2, 3, 4]
第--2--次[1, 2, 9, 3, 4]
第--3--次[1, 2, 3, 9, 4]
第--4--次[1, 2, 3, 4, 9]
第 2 趟
第--1--次[1, 2, 3, 4, 9]
第--2--次[1, 2, 3, 4, 9]
第--3--次[1, 2, 3, 4, 9]
第 3 趟
第--1--次[1, 2, 3, 4, 9]
第--2--次[1, 2, 3, 4, 9]
第 4 趟
第--1--次[1, 2, 3, 4, 9]
========= Final =============
第 1 趟
第--1--次[1, 2, 3, 4, 9]
第--2--次[1, 2, 3, 4, 9]
第--3--次[1, 2, 3, 4, 9]
第--4--次[1, 2, 3, 4, 9]

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/86637106
今日推荐