算法绘本-冒泡排序

冒泡排序是一种简单的排序方式,其原理是两两比较,将较大的值放右边,较小的值放左边,经过多轮的比较,最终将给定的值排好顺序。

举个例子

假设给定初始顺序如下的几个数字:6,2,7,4,7,9,1

冒泡排序01.png

我们用冒泡排序方式将数字按从小到大的顺序排序

第一轮,第一次,对比第一个数字6和第二个数字2,因为6比2大,所以需要交换6和2的位置

冒泡排序02.png

第一轮,第二次,对比第二个数字6和第三个数字7,因为6比7小,所以不需要交换位置

冒泡排序03.png

第一轮,第三次,比较第三个数字7和第四个数字4,因为7比4大,所以交换7和4的位置

冒泡排序04.png

第一轮,第四次,比较第四个数字7和第五个数字7,因为值一样,不需要交换位置

冒泡排序05.png

第一轮,第五次,比较第五个数字7和第六个数字9,因为7比9小,不需要交换位置

冒泡排序06.png

第一轮,第六次,比较第六个数字9和第七个数字1,因为9比1大,所以交换9和1的位置

冒泡排序07.png
第一轮比较结束,至此,将这些数字中最大的数字9排到最右边,9这个数字就不动了,不再参与后续比较

冒泡排序08.png

接下来开始第二轮比较

第二轮,第一次,比较第一个数字2和第二个数字6,因为2比6小,不需要交换位置

冒泡排序09.png

第二轮,第二次,比较第二个数字6和第三个数字4,因为6比4大,所以交换6和4的位置

冒泡排序10.png

第二轮,第三次,比较第三个数字6和第四个数字7,因为6比7小,不需要交换位置

冒泡排序11.png

第二轮,第四次,比较第四个数字7和第五个数字7,因为一样大,不需要交换位置

冒泡排序12.png

第二轮,第五次,比较第五个数字7和第六个数字1,因为6比1大,所以交换7和1的位置

冒泡排序13.png

第二轮比较结束,这一轮将第二大的数字7排到了右边,这个7的位置不用动了,不再参与后续比较

冒泡排序14.png

接下来,开始第三轮比较

第三轮,第一次,比较第一个数字2和第二个数字4,因为2比4小,不需要交换位置

冒泡排序15.png

第三轮,第二次,比较第二个数字4和第三个数字6,因为4比6小,不需要交换位置

冒泡排序16.png

第三轮,第三次,比较第三个数字6和第四个数字7,因为6比7小,不需要交换位置

冒泡排序17.png

第三轮,第四次,比较第四个数字7和第五个数字1,因为7比1大,所以需要交换7和1的位置

冒泡排序18.png

第三轮比较结束,这一轮,将第三大(和第二大一样)的数字7排到了右边,这个7也不动了,不再参与后续比较

冒泡排序19.png

然后开始第四轮比较

第四轮,第一次,比较第一个数字2和第二个数字4,因为2比4小,所以不需要交换位置

冒泡排序20.png

第四轮,第二次,比较第二个数字4和第三个数字6,因为4比6小,不需要交换位置

冒泡排序21.png

第四轮,第三次,比较第三个数字6和第四个数字1,因为6比1大,需要交换6和1的位置

冒泡排序22.png

第四轮结束,这一轮,我们将第四大的数字6排到了右边,数字6也不动了,不再参与后续比较

冒泡排序23.png

接着进行第五轮比较

第五轮,第一次,比较第一位数字2和第二位数字4,因为2比4小,所以不需要交换位置

冒泡排序24.png

第五轮,第二次,比较第二位数字4和第三位数字1,因为4比1大,所以需要交换4和1的位置

冒泡排序25.png

第五轮结束,我们将第五大数字4放到了右边,数字4的位置不动了,不再参与后续比较

冒泡排序26.png

接着进行第六轮比较,第六轮只剩下第一位2和第二位1比较了,因为2比1大,所以需要交换2和1的位置

冒泡排序27.png

第六轮结束,这样整个排序就完成了,得到了最终的结果

冒泡排序28.png

总结:

  • 冒泡排序的时间复杂度是O(n^2),实际使用的时候可能会经过一些优化,时间复杂度要稍微小一些,空间复杂度为O(1)
  • 冒泡排序是一种稳定的排序算法,相等的元素在排序后会保持原来的顺序不变。

今天开始要写一些算法相关的笔记啦,先自己弄懂,然后以图文的方式记录,加深印象,提升自己在算法方面的不足。这一系列给它取个名字,就叫《算法绘本》吧,加油。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值