![c8efa998e10a8903d5961e3228c00365.png](https://i-blog.csdnimg.cn/blog_migrate/62ca4ed8bfa68479771349b85cefeda7.jpeg)
冒泡排序的概念
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序的算法运作
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。Java实现:
public
冒泡排序的缺点
![d609db0eec103cc6da62d3c8cd7f1f69.png](https://i-blog.csdnimg.cn/blog_migrate/199c3677baca093e4f25773ed543f2a3.jpeg)
冒泡排序的改进:
A.设置标识变量changed
Java代码:
import
运行结果:
![eb0c6366ba809c7aca608e3aa8973e0e.png](https://i-blog.csdnimg.cn/blog_migrate/3763257f7ceef5f4b5a6df38c69a837b.png)
冒泡排序图解:
![7609c66089efb06b02765bda2fd91c2f.png](https://i-blog.csdnimg.cn/blog_migrate/b505ff09138b5ae27eeaf6e664499306.jpeg)
B.鸡尾酒排序
鸡尾酒排序又叫定向冒泡排序,搅拌排序、来回排序等,是冒泡排序的一种变形。此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。
鸡尾酒排序在于排序过程是先从低到高,然后从高到低;而冒泡排序则仅从低到高去比较序列里的每个元素。它可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。
以序列(2,3,4,5,1)为例,鸡尾酒排序只需要从低到高,然后从高到低就可以完成排序,但如果使用冒泡排序则需要四次。
但是在乱数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲。
java代码:
void
冒泡排序的时间复杂度和空间复杂度
(1)时间复杂度
在设置标志变量之后:
当原始序列“正序”排列时,冒泡排序总的比较次数为n-1,移动次数为0,也就是说冒泡排序在最好情况下的时间复杂度为O(n);
当原始序列“逆序”排序时,冒泡排序总的比较次数为n(n-1)/2,移动次数为3n(n-1)/2次,所以冒泡排序在最坏情况下的时间复杂度为O(n^2);
当原始序列杂乱无序时,冒泡排序的平均时间复杂度为O(n^2)。
(2)空间复杂度
冒泡排序排序过程中需要一个临时变量进行两两交换,所需要的额外空间为1,因此空间复杂度为O(1)。
参考文章:
https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F
https://blog.csdn.net/guoweimelon/article/details/50902597