int 数组中的二进制搜索找不到正确的值 0 或更小



我执行了以下测试:

int[] test1 = {1, 2, 3};
System.out.println(Arrays.binarySearch(test1, 3)); //prints 2
int[] test2 = {1, 0, 3};
System.out.println(Arrays.binarySearch(test2, 0)); //prints 1
int[] test3 = {1, 2, 0};
System.out.println(Arrays.binarySearch(test3, 0)); //prints -1 (item not found), expected value: 2

我刚刚在 Java 实现中发现了错误还是我做错了什么?

二叉搜索需要对输入序列进行排序(如通过 sort(byte[]( 方法(。

这就是为什么只有这个返回正确的结果:

int[] test1 = {1, 2, 3};  // <-- this has to be sorted.
System.out.println(Arrays.binarySearch(test1, 3)); //prints 2

所以,你没有在java中发现错误:)如果将未排序的数组传递给二叉搜索,则它不会返回正确的结果。对于未排序的数组,您必须使用顺序搜索。

最新更新