冒泡排序算法详解

Posted java架构师进阶之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序算法详解相关的知识,希望对你有一定的参考价值。

前言

十大排序算法可以说是每个程序员都必须得掌握的了,也是面试中最常考察的知识点之一。

这十大排序算法包括:选择排序、插入排序、冒泡排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。

今天主要讲解冒泡排序,其他算法后续更新。

术语铺垫

有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下:

1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。

2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。

3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。

4、非原地排序:需要利用额外的数组来辅助排序。

5、时间复杂度:一个算法执行所消耗的时间。

6、空间复杂度:运行完一个算法所需的内存大小。

正文

冒泡排序定义为:在一个数组中,把第一个元素与第二个元素比较,如果第一个比第二个大,则交换他们的位置。接着继续比较第二个与第三个元素,如果第二个比第三个大,则交换他们的位置....

我们对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样一趟比较交换下来之后,排在最右的元素就会是最大的数。

除去最右的元素,我们对剩余的元素做同样的工作,如此重复下去,直到排序完成。

读完上面的话,可能很多依然比较疑惑。

我们把内容简化,简化为把物体大小按照从小到到大的顺序进行排列:

起始时,左下标指向第一个圆,右下标指向第二个圆,然后比较。

然后左右下标同时向右移动,再次进行比较。


冒泡排序算法详解

这样一来,每次比较完,右下标指向的圆就是已经比较过的圆中的最大面积的。

冒泡排序算法详解

按照上面逻辑,这一趟下来所有圆中最大的就跑到最右边了。

冒泡排序算法详解

这是第一趟排序,经过这趟排序之后,最大的就在最右边了,也就是排好序了,那么接下来就从剩下的三个圆中选最大的了,规则就和上面的一样了。

冒泡排序算法详解

那么:

如果有 N 个圆,称从左到右找最大为一趟,那么要排好序需要多少趟?

答案是需要N-1次,因为如果因为N-1个数都排好了,那么最后一个数也就不用排了。

逻辑分析完了,那么代码实现为:

冒泡排序算法的所有内容

以上。


以上是关于冒泡排序算法详解的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序算法,C语言冒泡排序算法详解

排序算法冒泡选择排序的Python实现及算法优化详解

冒泡排序算法详解(javapython实现)

冒泡选择插入排序算法——基础排序算法详解。

冒泡排序算法详解(javapython实现)

冒泡排序算法详解(javapython实现)