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

Java 冒泡排序基礎實作:標準演算法邏輯與程式碼範例

     編輯:Java 綜合教學

冒泡排序核心邏輯

冒泡排序透過相鄰元素兩兩比較,將較大元素逐步「冒泡」到陣列右端。每一輪結束,當前未排序區間的最大值會移動到正確位置。

標準實作程式碼

public class BubbleSort {
    public static void main(String[] args) {
        int[] array = { -1, 10, 3, 27, 15, 8 };
        
        // 外層控制輪數 (n-1 輪)
        for (int i = 0; i < array.length - 1; i++) {
            // 內層掃描未排序區 (每輪縮減 1)
            for (int j = 0; j < array.length - i - 1; j++) {
                // 相鄰比較,大的往後交換
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        
        // 輸出結果
        System.out.println("排序結果:");
        for (int num : array) {
            System.out.println(num);
        }
    }
}

執行過程追蹤 (以 { -1, 10, 3, 27, 15, 8 } 為例)

輪數比較過程輪末狀態
1-1<10, 10>3↔, 10>27, 27>15↔, 27>8↔{-1, 3, 10, 15, 8, 27}
2-1<3, 3<10, 10>15, 15>8↔{-1, 3, 10, 8, 15, 27}
3-1<3, 3<10, 10>8↔{-1, 3, 8, 10, 15, 27}
4-1<3, 3<8{-1, 3, 8, 10, 15, 27}
5-1<3{-1, 3, 8, 10, 15, 27}

關鍵程式碼片段解析

// 外層迴圈:i 從 0 到 length-2 (共 n-1 輪)
for (int i = 0; i < array.length - 1; i++) {

    // 內層迴圈:j 從 0 到 length-i-2 (避免 j+1 越界,且跳過已排序右側)
    for (int j = 0; j < array.length - i - 1; j++) {
        
        // 核心判斷:相鄰元素逆序則交換
        if (array[j] > array[j + 1]) {
            // 三步驟交換 (需暫存變數)
            int temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
        }
    }
}

效能特徵

  • 時間複雜度:O(n²) - 最好/平均/最差皆為平方級 (無優化時)
  • 空間複雜度:O(1) - 原地排序,僅需 1 個暫存變數
  • 穩定性:穩定 - 相等元素不交換,相對順序保持
  • 比較次數:固定為 n(n-1)/2
  • 交換次數:最好 0 (已有序),最差 n(n-1)/2 (逆序)

常見優化方向 (進階)

  1. 早期終止旗標:若某輪無交換,說明已有序,break 跳出
  2. 記錄最後交換位置:下一輪只需掃描到該位置
  3. 雞尾酒排序:雙向冒泡,適用於「小數值在右端」的極端分佈

生產環境建議

請勿在生產代碼中直接使用冒泡排序。
Java 內建 Arrays.sort() (基本型別 Dual-Pivot Quicksort,物件 TimSort) 時間複雜度 O(n log n),經過高度優化且極其穩健。本演算法僅供教學、面試、極小資料量 (n<20) 簡易腳本使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved