java算法-冒泡排序

算法原理

例如我們有一個數組,我們如果需要把較大的元素排在後面,把小的元素排在前面,那麼需要從頭部到尾開始比較操作:

  1. 依次比較相鄰的兩個數,如果第一個比第二個大,就交換他們兩個
  2. 往後對每個相鄰的元素都做這樣的比較,交換操作,這樣到數組尾部時,最後一個元素會成爲最大的元素
  3. 重新從頭部開始第 1、2 步的操作,除了在這之前尾部已經排好的元素
  4. 繼續對越來越少的數據進行比較和交換操作,直到沒有可比較的數據爲止,排序完成

有一個數組:5,3,6,2,1,7,4,希望從小到大排序。按照冒泡排序的思想,我們要把相鄰的元素兩兩比較,根據大小來交換元素的位置,過程如下:


首先讓5和3比較,發現5比3要大,所以5和3交換位置

繼續比較5和6比較,發現5比6要小,所以元素位置不變
接下來讓6和2比較,發現6比2要大,所以6和2交換位置

接下來讓6和1比較,發現6比1要大,所以6和1交換位置

接下來讓6和7比較,發現6比7要小,元素位置不變
繼續讓7和4比較,發現7大於4,7和4交換位置

可以看到,經過第一趟的排序之後。我們已經找到了最大的元素,並且把最大的數字7排最右側,就像水氣泡從水底冒上來一樣,所以形象的稱爲“冒泡排序”。
後續比較跟上面同理~

代碼實現

代碼比較簡單,使用雙循環來進行排序
外部循環控制所有的回合
內部循環代表每一輪的冒泡處理,先進行元素比較,再進行元素交換

public static void main(String args[]) {
        int arr[] = {5, 3, 6, 2, 1, 7, 4};
        System.out.println("未排序:"+ Arrays.toString(arr));
        //定義一個臨時變量
        int temp;
        //冒泡趟數 n-1趟
        for (int x = 0; x < arr.length - 1; x++) {
            for (int y = 0; y < arr.length - x - 1; y++) {
                if (arr[y] > arr[y + 1]) {
                    temp = arr[y];
                    arr[y] = arr[y + 1];
                    arr[y + 1] = temp;
                }
            }
        }
        System.out.println("排序後:"+ Arrays.toString(arr));
    }

未排序:[5, 3, 6, 2, 1, 7, 4]
排序後:[1, 2, 3, 4, 5, 6, 7]

希望本文內容對大家有所幫助。

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