面试官:请介绍下冒泡排序算法

前言

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

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

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

术语铺垫

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

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

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

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

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

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

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

正文

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

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

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

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

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

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

面试官:请介绍下冒泡排序算法

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

面试官:请介绍下冒泡排序算法

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

面试官:请介绍下冒泡排序算法

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

面试官:请介绍下冒泡排序算法

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

面试官:请介绍下冒泡排序算法

那么:

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

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

面试官:请介绍下冒泡排序算法

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

面试官:请介绍下冒泡排序算法

冒泡排序算法的所有内容

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值