其实从我学习c++以来,我一直搞不明这两个排序有什么区别!!
不过呢,今天经过某位高师的知道,在下顿悟了!!
现在就说说我的心得把,如果有错请见谅!!
我们先看一段排序的例子把:
这里有一个数组:
12 45 342 2
前面我弄的比较特别:是一个顺序的排列,而只有最后一个数不是有序的
我们现在来排序,而这里只要排最后一个数
对于插入排序来说,进行一趟排序之后就有: 2 12 45 342
而对于冒泡排序,进行一趟排序之后有: 12 45 2 342
你明白我的意思吗?(你懂得!)
打个比喻:
插入排序就像是抽扑克牌,抽到一张牌就直接把它放到适合的位置,
而冒泡排序的话就像是一个一个老太太,一步一步向上挪,每次只挪一步!
从上面的例子来看:
冒泡排序还要挪两步才把2挪到最前面,
而插入排序是直接把2查到最前面的!
我想我说到这里大家应该会明白了!至于代码实现的话以后我在放到博文里……
//以上是从一位博友那里转载的,下面是维基百科的解释
冒泡排序是与插入排序拥有相等的执行时间,但是两种法在需要的交换次数却很大地不同。在最坏的情况,冒泡排序需要次交换,而插入排序只要最多交换。冒泡排序的实现(类似下面)通常会对已经排序好的数列拙劣地执行(),而插入排序在这个例子只需要个运算。因此很多现代的算法教科书避免使用冒泡排序,而用插入排序取代之。冒泡排序如果能在内部循环第一次执行时,使用一个旗标来表示有无需要交换的可能,也有可能把最好的复杂度降低到。在这个情况,在已经排序好的数列就无交换的需要。若在每次走访数列时,把走访顺序和比较大小反过来,也可以稍微地改进效率。有时候称为往返排序,因为算法会从数列的一端到另一端之间穿梭往返。