Arrays.binarySearch()如何工作而不进行排序

时间:2013-11-03 18:42:09

标签: java arrays sorting binary-search

我很想知道当我使用Arrays.binarySearch而不进行排序时,我得到的答案背后的逻辑是什么。

int d[]={6,-4,12,0,-10};
int x=12;
int y=Arrays.binarySearch(d,x);

   System.out.println(y);

输出:2

我正准备参加java竞赛,其中提出了这种罕见的案例,所以我问了这个问题。请帮助解决任何可能的问题。

4 个答案:

答案 0 :(得分:4)

你很幸运。 Java实现要求对数组进行排序以保证正确答案:

  

必须先对数组进行排序(如sort(int [])方法)   打这个电话。如果未排序,则结果未定义。

Source

答案 1 :(得分:3)

根据Java API参考,if it is not sorted, the results are undefined.

在你的情况下,你很幸运:二元搜索是"分裂和征服"。
该算法查看数组的中间位置。如果是数字,则返回(在您的示例中就是这种情况 - 这就是它起作用的原因)  如果元素大于您搜索的元素,请重复左侧部分(具有较低nubmers的元素)。否则使用正确的 重复,直到找到元素。如果您只剩下1个元素,并且它不是您搜索的元素,则该元素不在该数组中。在Java实现的情况下,它只返回找到的最后一个元素的索引(恰好是i(-(insertion point) - 1)

答案 2 :(得分:0)

你可以得到任何东西。阅读Arrays.binarySearch

的javadoc
  

在进行此调用之前,必须对数组进行排序(如sort(int [])方法)。如果未排序,则结果未定义。

答案 3 :(得分:0)

现在javadocs表示

  

在进行此调用之前,必须对数组进行排序(如sort(int [])方法)。如果未排序,则结果未定义。如果数组包含多个具有指定值的元素,则无法保证找到哪个元素。