冒泡排序
冒泡排序(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); } }