我试图了解一些排序算法,但是我正努力查看气泡排序和插入排序算法的区别。
我知道两者都是O(n 2),但是在我看来,冒泡排序只是将每次通过时数组的最大值冒泡到顶部,而插入排序只会使每次通过时将最小值沉到底部。他们不是在做完全相同的事情,但方向不同吗?
对于插入排序,比较/潜在交换的次数从零开始,并且每次都增加(即0、1、2、3、4,…,n),但对于冒泡排序,会发生相同的行为,但是在结束时排序(即n,n-1,n-2,… 0),因为气泡排序在排序时不再需要与最后一个元素进行比较。
尽管如此,似乎人们普遍认为插入排序通常更好。谁能告诉我为什么?
编辑: 我主要对算法工作方式的差异感兴趣,与其说是效率或渐进复杂性,不如说是。
在第i个迭代中的冒泡排序中,您总共有ni-1个内部迭代(n ^ 2)/ 2,但是在插入排序中,第i步具有最多i个迭代,但是平均而言,i / 2,因为您可以停止内部循环找到当前元素的正确位置之后,再进行操作。所以你有(从0到n的总和)/ 2,共(n ^ 2)/ 4;
这就是为什么插入排序比气泡排序更快的原因。