首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 基礎演算法:氣泡排序兩種寫法與邏輯解析

     編輯:Java 相關知識

氣泡排序核心概念

氣泡排序透過相鄰元素兩兩比較、交換,將較大(或較小)元素逐步「浮」至陣列末端。時間複雜度 O(n²),適合教學與小規模資料。

寫法一:外層從前往後,內層從 i+1 到末尾

public static void bubbleSortForward(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (arr[i] > arr[j]) {
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    // 印出結果
    for (int v : arr) System.out.println(v);
}

邏輯:第 i 輪結束後,arr[i] 為 i..n-1 區間最小值。

寫法二:外層從前往後,內層從末尾往前遞減

public static void bubbleSortBackward(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n; i++) {
        for (int j = n - 1; j > i; j--) {
            if (arr[i] > arr[j]) {
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    for (int v : arr) System.out.println(v);
}

邏輯:內層從後往前掃描,同樣保證第 i 輪結束時 arr[i] 為剩餘區間最小值。

優化方向(進階)

  • 加入 boolean swapped 標記,若某輪無交換提前結束(最佳 O(n))。
  • 雙向氣泡排序,奇數輪正向、偶數輪反向,減少移動次數。

完整可執行範例

public class BubbleSortDemo {
    public static void main(String[] args) {
        int[] data = {5, 2, 9, 1, 5, 6};
        System.out.println("排序前:" + Arrays.toString(data));
        bubbleSortForward(data.clone());
        System.out.println("排序後:" + Arrays.toString(data));
    }
    // ... 兩個排序方法
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved