冒泡排序的效率分析

冒泡排序的执行步骤可分为两种。

❏ 比较:比较两个数看哪个更大。

❏ 交换:交换两个数的位置以使它们按顺序排列。

先看看冒泡排序要进行多少次比较。回顾之前那个5个元素的数组,你会发现在第1次轮回我们为4对元素进行了4次比较。

到了第2次轮回,则只做了3次比较。这是因为第1次轮回已经确定了最后一个格子的元素,所以不用再比较最后两个元素了。

第3次轮回,只比较2次;第4次,只比较1次。

算起来就是:

4 + 3 + 2 + 1=10次比较。

推广到N个元素,需要

(N -1) + (N -2) + (N -3) + … + 1次比较。

分析过比较之后,再来看看交换。

如果数组不只是随机打乱,而是完全反序,在这种最坏的情况下,每次比较过后都得进行一次交换。因此10次比较加10次交换,总共20步。

现在把两种步骤放在一起来看。一个含有10个元素的数组,需要:

9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1=45次比较,以及45次交换,共90步。20个元素的话,就是:19 + 18 + 17 + 16 + 15 + 14 + 13 + 12 + 11 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1=190次比较,以及190次交换,共380步。

效率太低了。元素量呈倍数增长,步数却呈指数增长,如下表所示。

再看仔细一点,你会发现随着N的增长,步数大约增长为$N^{2}$

因此描述冒泡排序效率的大O记法,是O($N^{2}$)。规范一些来说:用O($N^{2}$)算法处理N个元素,大约需要$N^{2}$步。O($N^{2}$)算法是比较低效的,随着数据量变多,其步数也剧增,如下图所示。

注意O($N^{2}$)代表步数的曲线非常陡峭,O(N)的则只呈对角线状。

最后一点:O($N^{2}$)也被叫作二次时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值