1. 程式人生 > 實用技巧 >演算法學習(一)氣泡排序

演算法學習(一)氣泡排序

一、引言

  演算法知識是計算機和軟體工程的基礎,雖然日常開發中很少會讓我們自己寫演算法,但是對於不是科班出身的我來說,技術就是我的精神食糧,所以這一分類開始記錄學習演算法的過程~~~

二、冒泡演算法

冒泡工具類

/**
 * 氣泡排序演算法工具類
 */
public class MaoPaoUtil {

    /**
     * 氣泡排序【對外暴露靜態方法】
     */
    public static void bubbleSort(int[] arr) {
        System.out.println("========排序前的陣列,元素為:" + showItem(arr) + "========");
        
//1、對資料迴圈,取出資料比較 for (int i = 0; i < arr.length - 1; i++) { //2、設定排序完成標記,若為true,則表示此次迴圈沒有進行交換,即待排序陣列已經有序,排序完成。 boolean flag = true; //3、再次對資料迴圈,取出資料比較 for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) {
//4、從新定義一個變數temp,作為交換變數用 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; flag = false; } } //5、若排序完成,結束迴圈 if (flag) { break; } else { System.out.println(
"第【" + (i + 1) + "】次排序後的陣列,元素為:" + showItem(arr) + "========"); } } } /** * 返回陣列字串 */ public static String showItem(int[] arr) { String itemStr = ""; if (null != arr) { itemStr = "【 "; for (int item : arr) { itemStr = itemStr + " " + item; } itemStr += " 】"; } return itemStr; } }

測試類

/**
 * 冒泡工具測試類
 */
public class MaoPaoTest {
    public static void main(String[] args) {
        //1、設定亂序陣列
        int[] arr = {1, 8, 3, 6, 9, 4, 5};
        //2、呼叫氣泡排序工具類
        MaoPaoUtil.bubbleSort(arr);
    }
}

解析

  基本思想:相鄰的元素進行兩兩比較順序相反則進行交換,這樣,每一趟會將最小或最大的元素“浮”到頂端,最終達到完全有序。

  時間複雜度:O(n2)

  圖解: