java排序算法之冒泡排序算法

排序算法之冒泡排序算法

冒泡排序

這個算法的名字由來是因爲越小的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。

原理

  1. 首先定義一個數組
    在這裏插入圖片描述

  2. 把它像冒泡一樣排序

第一次   132 相比  1<32  不動      故數組爲 {1, 32, 5, 75, 3, 4, 88} 未發生變化
第二次  325  相比  32>5  調換位置  故數組爲 {1, 5, 32, 75, 3, 4, 88} 532 調換位置 大的在右邊 冒泡繼續向上升
第三次  3275 相比  32<75 不動      故數組爲 {1, 5, 32, 75, 3, 4, 88} 未發生變化
第四次  753 相比  75>3 調換位置    故數組爲 {1, 5, 32, 3, 75, 4, 88} 375 調換位置 大的在右邊 冒泡繼續向上升
第五次  754 相比  75>4 調換位置    故數組爲 {1, 5, 32, 3, 4, 75, 88} 475 調換位置 大的在右邊 冒泡繼續向上升
第六次  7588 相比  75<88 不動      故數組爲 {1, 5, 32, 3, 4, 75, 88} 未發生變化
第一輪結束 出現最大的 88 在最後 第二輪開始 繼續這樣相比
。。。。。。。
第二輪結束 :數組爲  {1, 5, 3, 4, 32, 75, 88} 第二大出現 :75 內排序次數會減一 因爲出現最大的數字了
第三輪結束 :數組爲  {1, 3, 4, 5, 32, 75, 88} 第三大出現 :32 內排序次數會減一 因爲出現最大的數字了
。。。。。。。
最後數組結果 {1, 3, 4, 5, 32, 75, 88}

排序結束

  1. 代碼
  int[] Bubbling = {1, 32, 5, 75, 3, 4, 88};


        for (int i = 0; i < Bubbling.length-1; i++) {
            for (int j = 0; j < Bubbling.length-1-i; j++) {
//                左右相比 若左邊大於右邊 則調換位置
                if (Bubbling[j]>Bubbling[j+1]){
//                    定義一個臨時變量記錄 左邊的數字
                    int temp = Bubbling[j];
//                    開始調換
                    Bubbling[j] = Bubbling[j+1];
//                    把臨時變量賦給右邊的數
                    Bubbling[j+1] = temp;
                }

            }
            System.out.println("第"+i+"輪:"+Arrays.toString(Bubbling));
        }
        System.out.println(Arrays.toString(Bubbling));

優化版本

 public class BubbleSort {
    public static void main(String[] args) {
        int[] bubbling = {1, 32, 5, 75, 3, 4, 88};
        bubbleSort(bubbling);
        System.out.println(Arrays.toString(bubbling));
    }

    public static void bubbleSort(int[] arr) {

        boolean flag = false; // 記錄是否經過調換
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    //進行調換
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    //經過調換  設置爲true
                    flag = true;
                }
            }
            //爲false 說明沒有經過調換  就跳過循環
            if (!flag) {
                break;
            } else {
                //經過了調換就給他 設置爲false
                flag = false;
            }
        }
    }
}

記得微笑 !在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章