冒泡排序
冒泡排序(Bubble Sort)是一種簡單直觀的排序算法。它重複地遍歷要排序的數組,依次比較兩個相鄰的元素大小,如果第一個比第二個大,就交換他們兩個。
算法原理
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
- 針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
複雜度及穩定性
平均時間複雜度 | 最優時間複雜度 | 最壞時間複雜度 | 空間複雜度 | 穩定性 |
---|---|---|---|---|
O(N^2) | O(N) | O(N^2) | O(1) | 穩定 |
動畫演示
視頻演示
代碼實現
-
python
def bubble_sort(_list): for i in range(len(_list)-1): for j in range(0, len(_list)-1 - i): if _list[j] > _list[j+1]: _list[j], _list[j + 1] = _list[j + 1], _list[j] return _list print(bubble_sort([2, 4,3,10,9, 1, 8, 5, 5])) # [1, 2, 3, 4, 5, 5, 8, 9, 10]
-
java
static int[] bubbleSort(int[] listData) { for (int i = 0; i < listData.length; i++) { for (int j = 0; j < listData.length - 1 - i; j++) { int temp = listData[j]; if (listData[j] > listData[j + 1]) { listData[j] = listData[j + 1]; listData[j + 1] = temp; } } } return listData; } // 查看輸出 public static void main(String[] args) { int[] test = bubbleSort(new int[]{2, 4,3,10,9, 1, 8, 5, 5}); for (int i: test) { System.out.println(i); } }
算法優化
冒泡排序還有一種優化算法,就是立一個 flag,當在一趟序列遍歷中元素沒有發生交換,則證明該序列已經有序。
-
python
def bubble_sort(_list): flag = True for i in range(len(_list)-1): for j in range(0, len(_list)-1 - i): if _list[j] > _list[j+1]: flag = False _list[j], _list[j + 1] = _list[j + 1], _list[j] if flag: break return _list print(bubble_sort([2, 4,3,10,9, 1, 8, 5, 5])) # [1, 2, 3, 4, 5, 5, 8, 9, 10]
-
java
static int[] bubbleSort(int[] listData) { boolean flag = true; for (int i = 0; i < listData.length; i++) { for (int j = 0; j < listData.length - 1 - i; j++) { int temp = listData[j]; if (listData[j] > listData[j + 1]) { flag = false; listData[j] = listData[j + 1]; listData[j + 1] = temp; } } if (flag){ break; } } return listData; } // 查看輸出 public static void main(String[] args) { int[] test = bubbleSort(new int[]{2, 4,3,10,9, 1, 8, 5, 5}); for (int i: test) { System.out.println(i); } }