Binarysearch未排序的数组

希望有人知道这个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); } 

哪两个结果可能? (选择两个。)
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?

提前致谢

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

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

这尤其意味着任何数字,包括七个,都是公平的游戏。

排序后的结果定义明确:您将获得1 。 好像通过魔法一样,答案列表中只有两对以1结尾,因此BE是审查员期望您做出的选择。

您可能应该坚持使用文档,而不是您对二进制搜索一般如何工作的了解。 API文档非常清楚在未排序的数组上使用Array.binarySearch :“如果没有排序,结果是未定义的。”

换句话说,如果数组未排序,则不需要遵循任何规则的结果。 从二进制搜索的实现中你可能知道结果不能超过数组长度。 但是,这是实施细节。 你不能依赖它。