为什么BinarySearch方法没有返回正确的结果?

时间:2019-03-08 15:09:38

标签: java arrays

最近我正在用Java处理数组,我需要使用Arrays类中的方法binarySearch(arr, v)来搜索数组v中值arr的索引(如果找到)。

然后,我对一些不同的数组进行了一些测试。当我尝试在数组4中搜索值{4, 3, 2, 1}时,我发现了-5

有人可以解释一下吗?

您可以在这里http://tpcg.io/kibBmw

代码如下:

int[] arr   = {4, 3, 2, 1};
System.out.println(Arrays.binarySearch(arr, 4));
  

-5

3 个答案:

答案 0 :(得分:3)

您应该在二进制搜索之前执行Arrays.sort(arr);。从Arrays.binarySearch的文档中:

  

使用二进制搜索算法在指定的int数组中搜索指定的值。进行此调用之前,必须对数组进行排序(如sort(int [])方法一样)。如果未排序,则结果不确定。

答案 1 :(得分:1)

只需查看javadoc。您需要具有排序的数组才能使用此方法。您可以执行以下操作:

Arrays.sort(arr);
Arrays.binarySearch(arr, 4)

答案 2 :(得分:0)

对于使用标准二进制搜索算法,您的输入数组必须按升序排列,否则您将得到意外的结果。