Двоичный поиск по массиву примитивов
Есть массив, в котором элементы отсортированы по убыванию
int[] arr = {50, 40, 30, 20, 10};
Нужно найти определенный элемент двоичным поиском.
Что пытался делать
int idx = Arrays.binarySearch(arr, 30, Collections.reverseOrder());
получаю ошибку, что тип int[] не соответствует типу T[].
Если массив объявить как Integer[] arr, то проблем не возникает
Задача учебная, поэтому использование других типов не предлагать.
Ответы (2 шт):
Автор решения: Anton Shchyrov
→ Ссылка
Нашел такое решение
int idx = Arrays.binarySearch(
Arrays.stream(arr).boxed().toArray(),
30,
Collections.reverseOrder()
);
Автор решения: Дмитрий
→ Ссылка
Если задача учебная, то нужно написать метод, в чем, собственно, вопрос:
private static int binarySearch(int[] a, int key) {
int low = 0;
int high = a.length;
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];
if (midVal > key)low = mid + 1;
else if (midVal < key) high = mid - 1;
else return mid;
}
return -(low + 1);
}