二进制搜索一个排序数组,为什么返回一个负数,为什么-low -1?

时间:2017-12-31 23:11:47

标签: java arrays

一个简单的问题,我只是想知道为什么当key = 12时,返回-6?我知道12不在数组中,但为什么它是6? 我想要一个详细的解释。 我知道low = 0; 如果未找到,则返回-low -1;但我不明白为什么。

int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
        System.out.println("1. Index is " + Arrays.binarySearch(list, 11));
        System.out.println("2. Index is " + Arrays.binarySearch(list, 12));

打印:

 1. Index is 4
 2. Index is -6

3 个答案:

答案 0 :(得分:1)

摘自BinarySearch

返回值:

此方法返回搜索关键字的索引,如果它包含在数组中,则返回( - (插入点) - 1)。插入点是键插入数组的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length。 < / p>

从返回值解释中,它返回元素在数组中的位置的否定(即-5)减去1,即-6。

答案 1 :(得分:1)

您可以参考Javadoc:Arrays.binarySearch(int[] a,int key)

它返回:

  • index of the search key,如果它包含在数组中;
  • 否则:(-(insertion point) - 1)。

这里的插入点是:

int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
           //  1^ 2^ 3^  4^  5^  

位置5所以(-5-1) = -6

答案 2 :(得分:0)

这是BinarySearch()方法的常见返回类型。 如果要打印整数a的索引:

int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
int a =12; //Value can be updated or read through Scanner
int temp = Arrays.binarySearch(list,a);
if(temp>=0){ 
     System.out.println("Index of a is : " + temp)
}else{
     System.out.println("Insertion point for a is : " + (-1)*(temp+1);
}