Java 不保证使用Array.BinarySearch?
Sun没有提到二进制搜索实现的任何复杂性。这是个错误吗?我知道应该是Java 不保证使用Array.BinarySearch?,java,complexity-theory,binary-search,Java,Complexity Theory,Binary Search,Sun没有提到二进制搜索实现的任何复杂性。这是个错误吗?我知道应该是O(logn),但如果他们没有明确说明这一点,我会感到紧张。他们的一些算法是这样的,比如array.sort 你们中有人知道实际的实现吗?我自己还没有机会下载源代码!我猜这是一个微不足道的二进制搜索,但Sun有时会调整算法以获得更好的性能 根据定义,二进制搜索是O(logn)(平均值)猜测,没有必要明确提及它。数组。sort保证返回已排序的数组,无论您的数组包含什么 数组。binarySearch(…)(小写字母“b”btw)不
O(logn)
,但如果他们没有明确说明这一点,我会感到紧张。他们的一些算法是这样的,比如array.sort
你们中有人知道实际的实现吗?我自己还没有机会下载源代码!我猜这是一个微不足道的二进制搜索,但Sun有时会调整算法以获得更好的性能 根据定义,二进制搜索是O(logn)(平均值)猜测,没有必要明确提及它。
数组。sort
保证返回已排序的数组,无论您的数组包含什么
数组。binarySearch(…)
(小写字母“b”btw)不能保证看到的任何东西都可能是未排序的数组
现在编辑我的答案:查看代码显然不可能执行比O(logn)更差的操作。但是,当然不能保证您会找到正确的值
你们中有人知道实际的实现吗
您可以在JDK安装中或使用Google搜索找到实际实现的源代码。例如,搜索“java.util.Arrays.java.html”
但是我毫不怀疑二进制搜索方法是
O(logN)
。如果他们不是,有人会注意到。。。在过去10年左右的时间里。java.util.Array的实现非常简单,没有优化的余地
您可以在JAVA\u HOME/src.zip
中找到源代码。
此类中的排序算法是使用二进制搜索所必需的,是一种优化的快速排序算法,它提供了n*log(n)性能(在许多数据集上)。查看代码,即使数组未排序,显然也不会比O(log n)差。@wizardofods-但您可能会得到错误的答案,当然。如果数组未排序,doco会明确表示结果未定义。最近,“此类中的排序算法,这是使用二进制搜索所必需的…”。为了清楚起见,您不需要使用
Array.sort(…)
。您可以确保使用任何有效的技术来订购阵列!!排序算法的复杂性与binarySearch的复杂性有什么关系?我也可以使用冒泡排序进行排序,然后使用binarySearch
在O(logn)中查找元素。为了使用二进制搜索,必须对数组进行排序,因为我实际上查看了源代码,我刚刚添加了此信息。