冒泡排序

  冒泡排序将被排序的记录数组R[1…n]垂直排列,每个记录R[i]看成是重量为ki的气泡。
  根据轻气 泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"飘 浮".如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
  冒泡排序的具体过程如下。
  第一步,先比较k1和k2,若k1>k2,则交换k1和k2所在的记录,否则不交换。继续对k2和k3重复上 述过程,直到处理完kn-1和kn.这时最大的排序码记录转到了最后位置,称第一次起泡。共执行n–1 次比较。
  第二步与第一步类似,从k1和k2开始比较,到kn-2和kn-1为止,共执行n–2次比较。称第二次起泡。
  依此类推,共进行n–1次起泡,完成整个排序过程。   若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数为n–1次,记录移动次数为0.因此,冒泡排序最好的时间复杂度为O(n)。
  若初始文件是反序的,需要进行n–1趟排序。每趟排序要进行n–i次关键字的比较(1≤i≤n- 1),且每次比较都必须移动记录3次来达到交换记录位置的目的。
  在这种情况下,比较次数达到最大值
n(n–1)/2=O(n2),移动次数也达到最大值
3n(n–1)/2=O(n2)。
  因此,冒泡排序的最坏时间复杂度为O(n2)。 虽然冒泡排序不一定要进行n–1趟,但由于它的记录移动次数较多,故平均时间性能比直接插入 排序要差得多。冒泡排序是就地排序,且它是稳定的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值