冒泡排序

今天再来回顾一下冒泡排序。冒泡排序(Bubble Sort) 是一中最基本的算法,也应该是最熟悉和最常见的算法了。何为冒泡?就像是我们在刚刚打开一瓶雪碧的时候(尤其是你摇晃几下之后再打开),里面有非常的气泡咕噜咕噜地冒出来,总体来说是一个一个的冒出来的,所以我们熟知的冒泡排序可以简单的理解为一个一个的排列。

而冒泡排序就是按照一定的规则进行排序的(由小到大或者由大到小),先用一个例子来解释

比如,有8个数组成的一个无序的数组,现在的要求是要把它们进行从小到大排序。按照冒泡排序的思想,我们要把相邻的两个元素进行比较,根据我们的要求按照大小交换位置,过程如下:

  • 首先需要让5和8 进行比较,发现5小于8 ,因此位置不变。
  • 然后让8与6比较,发现8比6大,所以交换8和6的位置。

  • 继续让8和3进行比较,发现8比3大,同样交换位置。

  • 继续让8与9进行比较,发现8比9小,因此 位置不变。
  • 然后用9与2进行比较,发现9比2大,交换两者位置

  • 继续让9与1比较,发现9比1大,交换两者位置。

  • 最后9与7进行比较,发现9比7大,交换位置。

这样一来,我们通过几次比较,已经把最大的数放到了整个数组的最后。然后再次从头开始,用5与6进行比较,等到第二轮比较结束时,我们得到的数组是这样的:

第三轮结束是这样的:

如此循环,当我们把所有把第8次(数组的长度)比较结束时,我们就已经得到我们想要的由小到大的数组了。

原始的冒泡排序是稳定排序,由于这种排序的算法是每一轮都要遍历所有的元素,轮转的次数和元素的数量相当,所以时间复杂度是o(N^2) 。

上面的原始的冒泡排序我们很容易发现问题,因为每当我们进行一轮排序的时候,最后面的几个数就已经是满足我们的排序的条件了,所以我们可以不用在进行比较。因为我们是先以第一个元素为基准,依次进行比较,直到数组中的最后一个元素,那么也就是说,第一轮结束之后,最后的元素已经是数组中最大的那个数了。那么再进行第二轮的时候,就没有必要再和最后一个数进行比较了(因为已经是整个数组最大的数了)。第二轮之后,数组最后两个数是符合我们的排序规则的,并且是在第三轮不需要再次比较的。

由此我们就可以发现一个规律,每一轮之后,都会出现一个一个符合我们排序规则的数,并在正确的位置上,所以我们可以利用数组的长度(数组中元素的个数),来做一个排序的优化。当第二轮排序的时候,不和最后一个进行比较,第三轮不和最后两个进行比较...第N轮 不和 最后(N-1)个数进行比较,以此来优化我们的冒泡排序。

冒泡排序回顾到此结束,只作回顾,不作其他。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值