冒泡排序透過相鄰元素兩兩比較,將較大元素逐步「冒泡」到陣列右端。每一輪結束,當前未排序區間的最大值會移動到正確位置。
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 | -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;
}
}
}
Arrays.sort() (基本型別 Dual-Pivot Quicksort,物件 TimSort) 時間複雜度 O(n log n),經過高度優化且極其穩健。本演算法僅供教學、面試、極小資料量 (n<20) 簡易腳本使用。