Получение неожиданного значения позиции из метода binarySearch в java - PullRequest
0 голосов
/ 09 июля 2020

В настоящее время работает с java основами. Во время обучения я написал следующий код.

import java.util.*;
class RemoveDuplicates{
    public static void main(String[] args) {
        int[] arr = {1,2,3,1,5,2,3};
        int[] out = {1,2,3,1,5,2,3};
        for(int each : arr){
            System.out.println("Element "+each+" at "+Arrays.binarySearch(out,each));
        }
    }
}

Мой ожидаемый результат:

Элемент 1 на 3

Элемент 2 на 5

Элемент 3 на 6

Элемент 1 на 3

Элемент 5 на 4

Элемент 2 на 5

Элемент 3 на 6

Мой фактический вывод:

Элемент 1 на 3

Элемент 2 на 5

Элемент 3 на 6

Элемент 1 на 3

Элемент 5 на -8

Элемент 2 на 5

Элемент 3 на 6

В моем фактическом выводе в элементе 5, почему я получаю -8 из функции Arrays.binarySeach(out,each)?

Объясните мне это, пожалуйста.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Всегда помните, чтобы двоичный поиск работал, вы должны отсортировать массив. Используйте Arrays.sort() для сортировки

import java.util.*;
class RemoveDuplicates{
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 1, 5, 2, 3};
        int[] out = {1, 2, 3, 1, 5, 2, 3};
        Arrays.sort(out);
        for(int each : arr) {
            System.out.println("Element "+each+" at "+Arrays.binarySearch(out,each));
        }
    }
}
0 голосов
/ 09 июля 2020

Если вы хотите использовать двоичный поиск, вам следует сначала отсортировать массив. add Arrays.sort(out);

Кроме того, к вашему сведению, нет никакой гарантии для нескольких элементов.

вот некоторые данные для Arrays.binarySearch(int[], int)

Ищет указанный массив целых чисел для указанного значение с использованием алгоритма двоичного поиска. Перед выполнением этого вызова массив должен быть отсортирован (как по методу sort (int [])). Если он не отсортирован, результаты не определены. Если массив содержит несколько элементов с указанным значением, нет гарантии, какой из них будет найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...