关于冒泡排序与合并排序

时间:2013-03-08 03:35:49

标签: algorithm sorting

这是我最近在互联网上发现的一个访谈问题:

如果要实现一个以整数数组作为输入并返回最大值的函数,您会使用冒泡排序或合并排序来实现此功能吗?如果阵列大小小于1000怎么办?如果它大于1000怎么办?

这就是我的想法:

首先,使用排序来实现上述功能真的很奇怪。你可以通过一次数组找到最大的数组。 其次,如果必须在两者之间做出选择,那么冒泡排序更好 - 你不必实现整个冒泡排序程序,而只需要进行第一次传递。它比时间和空间上的合并排序更好。

我的回答是否有错误?我错过了什么吗?

6 个答案:

答案 0 :(得分:14)

这是一个棘手的问题。如果您只想要任何k的最大值(或实际上k th 值,包括找到中位数),那么就有一个非常好的O(n)算法。排序是浪费时间。这就是他们想要听到的。

正如你所说,最大化算法实际上是微不足道的。要解决这样的问题,您应该准备好快速选择算法,并且还能够建议堆数据结构,以防您需要能够改变值列表并始终能够快速生成最大值。 / p>

答案 1 :(得分:4)

我只是用Google搜索算法。泡泡排序在两种情况下都会获胜,因为只需要通过它一次就可以获得最大的好处。合并排序不能削减任何捷径只需要计算最大数量。合并取列表的长度,找到中间,然后中间的所有数字与左边相比,上面的所有数字都与右边比较;反对创造独特的对比较。对于数组中剩下的每个数字的含义,需要进行相同数量的比较。除此之外,每个数字都要进行两次比较,因此在两次比较中最有可能消除数组的最小数量。在许多情况下进行两次比较后,数组中只有少一个数字。泡泡将占主导地位

答案 2 :(得分:2)

首先,我同意你所说的一切,但也许它要求了解算法的时间复杂度以及输入大小是最快的一个重要因素。

冒泡排序为O(n2),合并排序为O(nlogn)。因此,在一个小集合上它不会有那么不同,但在很多数据上,冒泡排序会慢得多。

答案 3 :(得分:1)

除了最大部分,冒泡排序渐渐变慢,但它对小n有很大的优势,因为它不需要合并/创建新数组。在某些实现中,这可能会使其实时更快。

答案 4 :(得分:1)

只需要一次传球,在最坏的情况下,找到最大值只需要遍历整个阵列,所以气泡会更好..

答案 5 :(得分:1)

合并排序很容易让计算机对元素进行排序,并且排序所需的时间少于冒泡排序。合并排序的最佳情况为n*log2n,最差情况为n*log2n。对于冒泡排序,最佳情况为O(n),最差情况为O(n2)