一尘不染

插入排序与冒泡排序算法

algorithm

我试图了解一些排序算法,但是我正努力查看气泡排序和插入排序算法的区别。

我知道两者都是O(n
2),但是在我看来,冒泡排序只是将每次通过时数组的最大值冒泡到顶部,而插入排序只会使每次通过时将最小值沉到底部。他们不是在做完全相同的事情,但方向不同吗?

对于插入排序,比较/潜在交换的次数从零开始,并且每次都增加(即0、1、2、3、4,…,n),但对于冒泡排序,会发生相同的行为,但是在结束时排序(即n,n-1,n-2,…
0),因为气泡排序在排序时不再需要与最后一个元素进行比较。

尽管如此,似乎人们普遍认为插入排序通常更好。谁能告诉我为什么?

编辑: 我主要对算法工作方式的差异感兴趣,与其说是效率或渐进复杂性,不如说是。


阅读 202

收藏
2020-07-28

共1个答案

一尘不染

在第i个迭代中的冒泡排序中,您总共有ni-1个内部迭代(n ^ 2)/ 2,但是在插入排序中,第i步具有最多i个迭代,但是平均而言,i /
2,因为您可以停止内部循环找到当前元素的正确位置之后,再进行操作。所以你有(从0到n的总和)/ 2,共(n ^ 2)/ 4;

这就是为什么插入排序比气泡排序更快的原因。

2020-07-28