当半数小于另一个时,是否可以在O(n)中对数组进行排序?

时间:2016-06-06 20:05:34

标签: sorting runtime

让我们说数组中元素的比较采用O(n),当数组的前半部分小于另一半时,是否可以在O(n)中对数组进行排序?

我认为是的,这会使排序变得更容易,因为元素并没有那么多。所以我们照顾上半场,小一点, 只比较一个元素与另一个元素并排序。然后对下半场做同样的事情。这不会在O(n)中发挥作用吗?

2 个答案:

答案 0 :(得分:0)

所以你将阵列分成两部分,第一部分中的所有项目都小于第二部分中的最小项目。然后你对各个部分进行排序?这听起来很像Quicksort的工作方式。

而且,不,你通常不能在O(n)中对数组进行排序。人们早就知道比较排序的下限是O(n log n)。有关原因的快速概述,请参阅https://en.wikipedia.org/wiki/Comparison_sort#Number_of_comparisons_required_to_sort_a_list。你可以从那里得到详细的参考资料。

答案 1 :(得分:0)

我没有得到这样的陈述:

  

让我们说数组中元素的比较需要O(n)

离开该陈述:不,它不是O(n)。你可以像你提到的那样做,但是我们没有得到关于两半中元素的任何信息。因此,要对上半部分进行排序,您需要(n / 2).log(n / 2)时间,同样对于下半部分,您需要(n / 2).log(n / 2)时间。所以对于整个数组,你需要n.log(n / 2),即O(nlogn)。