冒泡排序与插入排序

其实从我学习c++以来,我一直搞不明这两个排序有什么区别!!

不过呢,今天经过某位高师的知道,在下顿悟了!!

现在就说说我的心得把,如果有错请见谅!!

我们先看一段排序的例子把:

这里有一个数组:

12   45      342   2

前面我弄的比较特别:是一个顺序的排列,而只有最后一个数不是有序的

我们现在来排序,而这里只要排最后一个数

对于插入排序来说,进行一趟排序之后就有:   2   12   45   342

而对于冒泡排序,进行一趟排序之后有:       12    45    2  342   

你明白我的意思吗?(你懂得!)

打个比喻:

插入排序就像是抽扑克牌,抽到一张牌就直接把它放到适合的位置,

而冒泡排序的话就像是一个一个老太太,一步一步向上挪,每次只挪一步!

从上面的例子来看:

冒泡排序还要挪两步才把2挪到最前面,

而插入排序是直接把2查到最前面的!

我想我说到这里大家应该会明白了!至于代码实现的话以后我在放到博文里……   

//以上是从一位博友那里转载的,下面是维基百科的解释

冒泡排序是与插入排序拥有相等的执行时间,但是两种法在需要的交换次数却很大地不同。在最坏的情况,冒泡排序需要O(n^2)次交换,而插入排序只要最多O(n)交换。冒泡排序的实现(类似下面)通常会对已经排序好的数列拙劣地执行(O(n^2)),而插入排序在这个例子只需要O(n)个运算。因此很多现代的算法教科书避免使用冒泡排序,而用插入排序取代之。冒泡排序如果能在内部循环第一次执行时,使用一个旗标来表示有无需要交换的可能,也有可能把最好的复杂度降低到O(n)。在这个情况,在已经排序好的数列就无交换的需要。若在每次走访数列时,把走访顺序和比较大小反过来,也可以稍微地改进效率。有时候称为往返排序,因为算法会从数列的一端到另一端之间穿梭往返。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值