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
结尾,因此B
和E
是审查员期望您做出的选择。
您可能应该坚持使用文档,而不是您对二进制搜索一般如何工作的了解。 API文档非常清楚在未排序的数组上使用Array.binarySearch
:“如果没有排序,结果是未定义的。”
换句话说,如果数组未排序,则不需要遵循任何规则的结果。 从二进制搜索的实现中你可能知道结果不能超过数组长度。 但是,这是实施细节。 你不能依赖它。