氣泡排序透過相鄰元素兩兩比較、交換,將較大(或較小)元素逐步「浮」至陣列末端。時間複雜度 O(n²),適合教學與小規模資料。
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));
}
// ... 兩個排序方法
}