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

Java 冒泡排序演算法完整實作與優化版本

     編輯:Java 相關知識

基本版

public static void bubbleSort(int[] a) {
    int n = a.length;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (a[j] > a[j + 1]) swap(a, j, j + 1);
        }
    }
}

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

優化版:提早結束旗標

public static void bubbleSortOptimized(int[] a) {
    int n = a.length;
    for (int i = 0; i < n - 1; i++) {
        boolean swapped = false;
        for (int j = 0; j < n - 1 - i; j++) {
            if (a[j] > a[j + 1]) { swap(a, j, j + 1); swapped = true; }
        }
        if (!swapped) break;  // 本輪無交換,已有序
    }
}

進階優化:記錄最後交換位置

public static void bubbleSortAdvanced(int[] a) {
    int n = a.length;
    int lastSwap = n - 1;
    while (lastSwap > 0) {
        int currentSwap = 0;
        for (int j = 0; j < lastSwap; j++) {
            if (a[j] > a[j + 1]) { swap(a, j, j + 1); currentSwap = j; }
        }
        lastSwap = currentSwap;  // 之後區段已有序
    }
}

複雜度分析

版本最好平均最壞空間穩定
基本O(n²)O(n²)O(n²)O(1)✓
旗標優化O(n)O(n²)O(n²)O(1)✓
記錄位置O(n)O(n²)O(n²)O(1)✓

教學用途提醒

冒泡排序僅適合教學示意,實務專案嚴禁用於大量資料。
生產環境請直接使用 Arrays.sort()(雙軸快排/TimSort)或 Collections.sort()。

測試主程式

public static void main(String[] args) {
    int[] data = {4, 2, 1, 8, 9, 4, 2};
    bubbleSortOptimized(data);
    System.out.println(Arrays.toString(data));  // [1, 2, 2, 4, 4, 8, 9]
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved