Binarysearch未排序的数组

时间:2012-06-16 06:18:12

标签: 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);
}

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

提前致谢

2 个答案:

答案 0 :(得分:9)

这是一个棘手的问题。根据文档:

,未定义数组上的二进制搜索结果是未定义的
  

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

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

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

答案 1 :(得分:1)

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

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