不保证Arrays.BinarySearch?

时间:2010-02-06 03:49:20

标签: java complexity-theory binary-search

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html

Sun没有提到他们的二进制搜索实现的任何复杂性。这是一个错误吗?我知道它应该是O(logn),但是当他们没有明确说明这一点时,我会感到紧张。他们为他们的一些算法做了,比如Arrays.sort。

您是否了解实际实施情况?我还没有机会自己下载源代码!我猜这是一个简单的二进制搜索,但Sun有时会调整算法以获得更好的性能。

4 个答案:

答案 0 :(得分:4)

二进制搜索根据定义O(log n)(平均而言)猜测没有必要明确提及它。

答案 1 :(得分:1)

Arrays.sort保证返回已排序的数组,无论您的数组包含什么。

Arrays.binarySearch(...)(小写'b'btw)无法保证您的数组可能未被排序。

现在编辑我的答案:看着代码显然不可能比O(log n)表现差。但是,当然不能保证你会找到正确的价值。

答案 2 :(得分:1)

java.util.Array的实施非常简单,没有优化的余地。

您可以在JAVA_HOME/src.zip中找到源代码。 此类中的排序算法是使用二进制搜索所必需的,是一个优化的快速排序,它提供n * log(n)性能(在许多数据集上)。

答案 3 :(得分:0)

  

你们是否对实际实施有任何了解?

您可以在JDK安装中或使用Google搜索自行查找实际实现的源代码。例如,搜索“java.util.Arrays.java.html”。

但我毫不怀疑binarySearch方法是O(logN)。如果他们不是有人会注意到...在过去10年左右。