8
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality");  

我总是得到-3。问题在"Name". "Name"为什么我的数组中不能有?任何的想法?

4

3 回答 3

27

为了使用binarySearch,您需要先自己对数组进行排序:

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

java.util.Arrays.sort(sortedArray);

int index = Arrays.binarySearch(sortedArray, "Quality");  
于 2010-09-09T06:09:18.573 回答
6

数组必须排序。来自 binarySearch() 的 Javadoc:

在进行此调用之前,必须根据其元素的自然顺序对范围进行升序排序。如果未排序,则结果未定义。

于 2010-09-09T06:09:00.943 回答
2

必须对数组进行排序才能使二进制搜索起作用。binarySearch的 javadoc 是这样说的:

在进行此调用之前,必须根据其元素的自然顺序(如 sort(Object[]) 方法)对数组进行升序排序。如果未排序,则结果未定义。

(强调补充。)

原因很简单。二分查找算法的前提条件是输入数组是有序的。

于 2010-09-09T06:24:43.017 回答