【发布时间】:2014-10-02 19:12:24
【问题描述】:
我在准备比赛时遇到了这个问题,我无法理解。 考虑一个数组中的一组“n”个元素,除了一个出现乱序的元素外,它都是排序的。以下哪个排序序列需要 O(n) 时间?
- 快速排序
- 堆排序
- 合并排序
- 冒泡排序
现在我已经知道最好的方法是使用插入排序,在这种情况下这将花费 O(n) 时间,但由于它告诉其他人,我不确定该使用哪个。
- 快速排序会很糟糕,因为数组已经排序了。
- 堆排序不会完全利用数组排序的属性,需要 O(nlogn) 时间。
- 合并排序也需要 O(nlogn),因为它不区分输入顺序。
- 冒泡排序也需要 O(n^2)。 真的很想在这里得到一些帮助,我错过了什么吗?
【问题讨论】:
-
您将不得不比您在此处提供的粗略摘要更深入地分析算法。
-
如果你使用修改后的 BubbleSort 只运行 2 次迭代,一次从左边,一次从右边,它将花费 O(n) 时间。
-
如果您总是选择第一项或最后一项作为基准,则对已排序数组的快速排序仅为 O(n^2)。如果您选择中间项目(或随机项目),则为 O(n log n)。
-
@MarkRansom:好吧,我只考虑了算法中适合我的问题的部分。您认为我们可以修改堆排序以使其更好一点吗?