冒泡排序算法详解
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个数都排好了,那么最后一个数也就不用排了。
逻辑分析完了,那么代码实现为:
冒泡排序算法的所有内容
以上。
以上是关于冒泡排序算法详解的主要内容,如果未能解决你的问题,请参考以下文章