我很想知道当我使用Arrays.binarySearch而不进行排序时,我得到的答案背后的逻辑是什么。
int d[]={6,-4,12,0,-10};
int x=12;
int y=Arrays.binarySearch(d,x);
System.out.println(y);
输出:2
我正准备参加java竞赛,其中提出了这种罕见的案例,所以我问了这个问题。请帮助解决任何可能的问题。
答案 0 :(得分:4)
答案 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 [])方法)。如果未排序,则结果未定义。如果数组包含多个具有指定值的元素,则无法保证找到哪个元素。