排序与插入的大O运行时间

时间:2012-11-06 08:19:13

标签: arrays sorting insert runtime big-o

因此,如果您使用快速排序对数组进行排序,您可以使用quicksort在O(nlogn)中对其进行排序,然后对其进行排序后,可以使用二进制搜索将新元素插入到O(logn)中的数组中esque算法。

我的问题是,有没有办法证明如果你可以在O(logn)时间内插入排序数组,那么这意味着排序算法必须至少为O(nlogn)?

换句话说,两个算法的运行时间之间是否存在关系?

3 个答案:

答案 0 :(得分:1)

否:可以使用bubblesort(O(n²))对数组进行排序。之后,仍然可以使用相同的算法在O(log(n))时插入。

答案 1 :(得分:1)

嗯,维护顺序的插入是O(log n)的事实意味着只需将每个元素依次插入到数组中就可以在O(n log n)中执行排序操作。然而,这可能与你真正要求的相反;它证明存在O(n log n)排序,但并不反驳更快排序的可能性。

答案 2 :(得分:0)

首先,一些需要特殊条件的排序算法可能会降低时间复杂度。例如Counting Sort,其复杂度为O(n + k)(其中k是数组中的最高数)或Radix Sort,复杂度为O(n * k)(其中k为最大值)数组元素中的位数。) O(nlogn)的界限适用于比较算法

第二,回答这个问题,不(遗憾地)。插入和排序之间的关系是另一种方式,就像davmac所说的那样。

比较的下限是您需要至少nlogn比较才能找到正确的顺序。有关详细信息,请参阅This wiki page on comparison sort algorithms。请注意,教授与插入无关(教授实际上不假设任何插入)。