冒泡应该是大部分同学第一个接触到的排序算法,冒泡在面试中也有很高的出现频率。所以务必要将其掌握。
冒泡排序依次遍历要排序的元素序列,依次比较两个相邻的元素,如果他们的顺序错误就进行交换。如此往复,知道待排序列中没有相邻元素要交换时排序完成。
其动态演示如图:

从其动态图可以看出,冒泡排序法在每轮遍历后都会将最大或者最小的元素慢慢的浮到顶端,这种下现象就像气泡上浮一般,所以算法命名冒泡排序
1 |
|
冒泡排序还有一种优化算法,就是建立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序,即可结束遍历
1 |
|
平均来讲, 时间复杂度为O(n²),
冒泡排序中只有缓存的temp变量需要内存空间, 因此空间复杂度为常量O(1).
Tips: 由于冒泡排序只在相邻元素大小不符合要求时才调换他们的位置, 它并不改变相同元素之间的相对顺序, 因此它是稳定的排序算法.
| 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 |
|---|---|---|---|
| O(n²) | O(n) | O(n²) | O(1) |
主要看数据的顺序情况,如果数据本身已经是离最终排序结果不远的,通过加个交换标识,冒泡排序可能是更快的。
所以所有排序算法的试用性都是分场景来看的,但是不得不承认冒泡排序在性能要求高的场景下,通用性不高
冒泡应该是大部分同学第一个接触到的排序算法,冒泡在面试中也有很高的出现频率。所以务必要将其掌握。
冒泡排序依次遍历要排序的元素序列,依次比较两个相邻的元素,如果他们的顺序错误就进行交换。如此往复,知道待排序列中没有相邻元素要交换时排序完成。
其动态演示如图:

从其动态图可以看出,冒泡排序法在每轮遍历后都会将最大或者最小的元素慢慢的浮到顶端,这种下现象就像气泡上浮一般,所以算法命名冒泡排序
1 |
|
冒泡排序还有一种优化算法,就是建立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序,即可结束遍历
1 |
|
平均来讲, 时间复杂度为O(n²),
冒泡排序中只有缓存的temp变量需要内存空间, 因此空间复杂度为常量O(1).
Tips: 由于冒泡排序只在相邻元素大小不符合要求时才调换他们的位置, 它并不改变相同元素之间的相对顺序, 因此它是稳定的排序算法.
| 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 |
|---|---|---|---|
| O(n²) | O(n) | O(n²) | O(1) |
主要看数据的顺序情况,如果数据本身已经是离最终排序结果不远的,通过加个交换标识,冒泡排序可能是更快的。
所以所有排序算法的试用性都是分场景来看的,但是不得不承认冒泡排序在性能要求高的场景下,通用性不高