对Arrays.BinarySearch没有保证?

问题描述 投票:2回答:4

https:/docs.oracle.comjavase1.5.0docsapijavautilArrays.html。

Sun并没有提到他们的二进制搜索实现有什么复杂性。这是不是一个错误?我知道应该是 O(logn)但当他们不明确说明这一点时,我很紧张。他们在一些算法上是这样做的,比如Arrays.sort。

你们有谁知道实际的实现方法吗?我自己还没有机会下载源代码!我想它是一个微不足道的二进制程序。我猜它是一个微不足道的二进制搜索,但Sun公司有时会对算法进行调整以获得更好的性能。

java complexity-theory binary-search
4个回答
1
投票

的实现 java.util.Array 是直接的,没有优化的空间。

你可以在 JAVA_HOME/src.zip.本类的排序算法。 为了使用二进制搜索,这是必须的。 是一个优化的quicksort,它提供了n*log(n)的性能(在许多数据集上)。


4
投票

二进制搜索的定义是O(log n)(平均),我想没有必要解释。


1
投票

Arrays.sort 不管你的数组包含什么,都能保证返回一个排序数组。

Arrays.binarySearch(...) (小写'b'btw)不能保证你的数组可能是未排序的。

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


0
投票

你们谁对实际的实现有了解吗?

你可以自己在JDK安装中找到实际实现的源代码,或者使用Google搜索。 例如,搜索 "java.util.Arrays.java.html"。

但我毫不怀疑,二进制搜索方法是 O(logN). 如果他们没有,有人会注意到... ...在过去的10年左右。

© www.soinside.com 2019 - 2024. All rights reserved.