Skip to content

一、冒泡排序

算法理论:

冒泡排序属于一种典型的交换排序。

交换排序顾名思义就是通过元素的两两比较,判断是否符合要求,如果不符合就交换位置来达到排序的目的。冒泡排序名字的由来就是因为在交换过程中,类似水冒泡,小(大)的元素经过不断的交换由水底慢慢的浮到水的顶端。

冒泡排序的思想就是利用的比较交换,利用循环将第 i 小或者大的元素归位,归位操作利用的是对 n 个元素中相邻的两个进行比较,如果顺序正确就不交换,如果顺序错误就进行位置的交换。通过重复的循环访问数组,直到没有可以交换的元素,那么整个排序就已经完成了。

动画演示:

冒泡排序

排序性能:

算法最好时间最坏时间平均时间额外空间稳定性
冒泡O(n)O(n^2)O(n^2)1稳定

关于稳定性:因为在比较的过程中,当两个相同大小的元素相邻,只比较大或者小,所以相等的时候是不会交换位置的。而当两个相等元素离着比较远的时候,也只是会把他们交换到相邻的位置。他们的位置前后关系不会发生任何变化,所以算法是稳定的。

二、代码实现

1. 常规版

下面详细分析一下常规版的冒泡排序,整个算法流程其实就是上面动画展示的过程。可以看出,我们在进行每一次大循环的时候,还要进行一个小循环来遍历相邻元素并交换。所以我们的代码中首先要有两层循环。

  • 外层循环:即主循环,需要辅助找到当前第 i 小的元素来让它归位。所以会一直遍历 n-2 次,这样可以保证前 n-1 个元素都在正确的位置上,那么最后一个也可以落在正确的位置上了。

  • 内层循环:即副循环,需要辅助进行相邻元素之间的比较和换位,把大的或者小的浮到水面上。所以会一直遍历 n-1-i 次这样可以保证没有归位的尽量归位,而归位的就不用再比较了。

Released under the MIT License.