小白日更第二十三天->八大排序之冒泡排序

关于八大排序算法相信很多小伙伴应该都有所了解,但我也仅仅是了解。今天想花一天时间把八大排序整理一下,把每个排序算法都自己理清楚思路之后,然后自己手敲一遍。接下来就一起学习吧~
在这里插入图片描述
冒泡排序应该算是最简单的排序算法了,相比于其他七个排序算法也是相对容易实现的。

具体过程

首先我们对一个数组进行遍历,在遍历的时候我们依次对比相邻的两个元素,注意是相邻的元素,这样我们在进行完一轮遍历的时候就会把当前数组中最大或者最小的元素排到数组的最后,这样我们使用双重for循环可以把数组元素中第一大,第二大,第三大。。。依次完成排序。这么解释小伙伴们应该理解了吧~如果还不理解就看一下我的代码吧
在这里插入图片描述

这段代码里的数组,我是用来和其他的排序算法进行对比的。也就是更直观的对比不同排序算法时间上的一个差距。

  1. 首先是双重for循环
  2. 第一轮比较完之后就把当前数组中最大的元素排到了元素最后面
  3. 已经确定了最大或最小的元素,我们就不用管这个数据了,那我们进行比较的时候就会少一次比较,在代码中对应第二个for循环中的条件是array.length-i-1,第一轮循环之后i变成了1,所以再循环的时候就可以少比较i个数,以此类推。

基本上这样就可以完成冒泡排序了,那我们考虑一种情况,如果数组本身就是有序的,那我么是不是还要进行双重for循环,是不是完全没有必要。那解决的方案也很简单,开始的时候我们设置一个Boolean类型的变量,如果在进行一轮比较的时候,发现没有任何两个相邻的元素进行数据交换,那我们把flag变量重新赋值为false,只要进行了一次数据交换就把flag置为true。这样就可以达到目的了,如果flag为false直接退出循环就可以了。

时间复杂度

我们可以看到,最好的情况也要进行完一次比较才能判断是不是有任何两个元素进行了数据交换,那这种最好的情况时间复杂度是O(n)
当然最坏的情况就是每次循环都有至少发生一次数据交换,那就只能走完双重for循环才可以完成排序,那这种最坏的情况的时间复杂度是O(n^2)

以上就是我对冒泡排序的理解,有理解错的地方或者代码还可以有优化的地方,希望小伙伴们在评论区积极留言~在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值