https:/docs.oracle.comjavase1.5.0docsapijavautilArrays.html。
Sun并没有提到他们的二进制搜索实现有什么复杂性。这是不是一个错误?我知道应该是 O(logn)
但当他们不明确说明这一点时,我很紧张。他们在一些算法上是这样做的,比如Arrays.sort。
你们有谁知道实际的实现方法吗?我自己还没有机会下载源代码!我想它是一个微不足道的二进制程序。我猜它是一个微不足道的二进制搜索,但Sun公司有时会对算法进行调整以获得更好的性能。
的实现 java.util.Array
是直接的,没有优化的空间。
你可以在 JAVA_HOME/src.zip
.本类的排序算法。 为了使用二进制搜索,这是必须的。 是一个优化的quicksort,它提供了n*log(n)的性能(在许多数据集上)。
二进制搜索的定义是O(log n)(平均),我想没有必要解释。
Arrays.sort
不管你的数组包含什么,都能保证返回一个排序数组。
Arrays.binarySearch(...)
(小写'b'btw)不能保证你的数组可能是未排序的。
现在编辑一下我的答案:看代码显然不可能表现得比O(log n)差。 但是当然不能保证你找到了正确的值。
你们谁对实际的实现有了解吗?
你可以自己在JDK安装中找到实际实现的源代码,或者使用Google搜索。 例如,搜索 "java.util.Arrays.java.html"。
但我毫不怀疑,二进制搜索方法是 O(logN)
. 如果他们没有,有人会注意到... ...在过去的10年左右。