【发布时间】:2014-04-29 13:51:36
【问题描述】:
有一个数组相关的问题,要求时间复杂度为O(n),空间复杂度为O(1)。
如果我使用Arrays.sort(arr),并使用for 循环进行一次循环,例如:
public static int hello(int[]A){
Arrays.sort(A);
for(int i=0;i<A.length;i++){
....................
}
return ....;
}
所以循环将花费 O(n) 时间。我的问题是:Arrays.sort() 会花费更多时间吗?如果我使用Arrays.sort(),这个时间复杂度还会是O(n)吗? Arrays.sort() 会占用更多空间吗?
【问题讨论】:
-
这并没有指定使用的排序算法,所以我看不出它是如何回答的。
-
@RobertHarvey:除非有人假设
Arrays.sort()使用了一些魔法,否则我认为关于它的最小时间复杂度的问题是完全可以回答的,不是吗? -
它指定
Arrays.sort,所以无论使用哪种算法。很难分辨这是什么语言(猜测是 Java),但标准库排序几乎总是比较排序。 -
尽管下面的答案部分都在喋喋不休,但您的实际问题的答案是肯定的:在平均情况下,排序将花费比 O(n) 更长的时间。
-
假设你对 big-O 复杂度有足够的了解,你真的应该问“
Arrays.sort的时间和空间复杂度是多少?”,这确实是一个没有研究工作的问题,因为这个是相当有据可查的。
标签: java arrays sorting time-complexity space-complexity