http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html
Sun没有提到他们的二进制搜索实现的任何复杂性。这是一个错误吗?我知道它应该是O(logn)
,但是当他们没有明确说明这一点时,我会感到紧张。他们为他们的一些算法做了,比如Arrays.sort。
您是否了解实际实施情况?我还没有机会自己下载源代码!我猜这是一个简单的二进制搜索,但Sun有时会调整算法以获得更好的性能。
答案 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年左右。