Binarysearch未排序的数组

use*_*010 1 java arrays binary-search

希望有人知道这个Java认证问题的答案:

public static void main(String[] args) {
 String[] sa = {"d", "c", "a", "b" };
 int x = Arrays.binarySearch(sa, "b");
 Arrays.sort(sa);
 int y = Arrays.binarySearch(sa, "b");
 System.out.println(x + " " + y);
}
Run Code Online (Sandbox Code Playgroud)

哪两个结果可能?(选择两项.)
A)7 0
B)7 1
C)7 3
D)-1 0
E)-1 1
F)-1 3

唯一真正的答案是E)-1 1,因为如果你玩二进制搜索算法,这是唯一可能的输出.但他们希望我选择两个...所以第二个必须是B)7 1然后,因为排序数组中的第二个二进制搜索将始终返回1.

所以我的问题是,为什么B)7 1可能的结果?更具体:如何可能,未排序数组中的第一个二进制搜索返回7?

提前致谢

das*_*ght 9

这是一个棘手的问题.根据文档,未排序的数组上的二进制搜索结果是未定义的:

在进行此调用之前,必须对数组进行排序(如上面的排序方法).如果未排序,则结果未定义.

这尤其意味着包括七个在内的任何数字都是合理的游戏.

排序后的结果是明确定义的:你会得到一个1.就像被施了魔法一样,只有两对结束1的答案就行了,所以BE是考官希望你做出的选择.