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

冒泡排序 Java 實現詳解:從原理圖解到優化代碼

     編輯:Java 程式設計入門

算法可視化流程

冒泡排序動態演示

每輪將最大元素「冒泡」到末尾,已排序區間從右向左擴展。

核心代碼(標準版 + 優化版)

public class BubbleSort {
    // 標準版
    public static void sortBasic(int[] arr) {
        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]) swap(arr, j, j + 1);
            }
        }
    }

    // 優化版:提前終止標誌
    public static void sortOptimized(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            boolean swapped = false;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr, j, j + 1);
                    swapped = true;
                }
            }
            if (!swapped) break; // 本輪無交換,已有序
            printRound(arr, i + 1);
        }
    }

    private static void swap(int[] arr, int i, int j) {
        int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
    }

    private static void printRound(int[] arr, int round) {
        System.out.print("第 " + round + " 輪: ");
        for (int v : arr) System.out.print(v + "\t");
        System.out.println();
    }

    public static void main(String[] args) {
        int[] data = {67, 69, 75, 87, 89, 90, 99, 100};
        System.out.println("原始: " + Arrays.toString(data));
        sortOptimized(data);
        System.out.println("結果: " + Arrays.toString(data));
    }
}

執行輸出

原始: [67, 69, 75, 87, 89, 90, 99, 100]
第 1 輪: 67	69	75	87	89	90	99	100
第 2 輪: 67	69	75	87	89	90	99	100
... (因已有序,第 1 輪後 swapped=false,直接 break)
結果: [67, 69, 75, 87, 89, 90, 99, 100]

複雜度與特性總結

指標數值
最好時間複雜度O(n) (優化版,已有序)
平均/最壞時間複雜度O(n²)
空間複雜度O(1) 原地排序
穩定性穩定 (相等元素不交換)

實際工程建議

  • 教學/極小數據量 (n < 50) 可用。
  • 生產環境首選 Arrays.sort() (雙軸快排/TimSort),或 Collections.sort()。
  • 若需自定義排序,實現 Comparable 或傳入 Comparator。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved