Arrays.binarySearch () возвращает неверную точку вставки - PullRequest
1 голос
/ 04 апреля 2020

Это код:

public class Main {

    public static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) throws IOException {

        int arr[] = {10,50,999,1000};
        int index = Arrays.binarySearch(arr,55);
        System.out.println(index);
    }
}

Вывод здесь равен «-3», если вывод по этой формуле «(- (точка вставки) - 1)», что означает, что точка вставки равна ' 4 'и это не правильно.

Так чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Точка вставки 2, а не 4.

Согласно официальной документации :

Точка вставки определяется как точка, в которой ключ будет вставлен в массив: индекс первого элемента больше , чем ключ [...]

Ваш массив с индексами:

[10, 50, 999, 1000]
  0   1    2     3

Первый элемент больше 55 равен 999 по индексу 2. Помните, что индексы начинают отсчитываться с 0.

, поэтому точка вставки равна 2. Таким образом, с формулой (-(insertion point) - 1) возвращаемое значение должно быть:

(-(2) - 1) = -3

Это именно то, что вы получили.

0 голосов
/ 04 апреля 2020

Нет пропущенных. Array.binarySearchs Возвращенный индекс ключа поиска, если он содержится в массиве; в противном случае (- (точка вставки) - 1). Точка вставки определяется как точка, в которой ключ будет вставлен в массив: индекс первого элемента больше, чем ключ, или a.length, если все элементы в массиве меньше указанного ключа. Обратите внимание, что это гарантирует, что возвращаемое значение будет> = 0 тогда и только тогда, когда ключ найден. это описание от здесь .

...