Подробнее о самом алгоритме можно прочитать в отдельной заметке. Здесь только реализация на Java.
Без рекурсии
С использованием рекурсии
Если элемент не найден, то вернется -1
.
m = l + (r - l) / 2;
Во многих примерах в интернете можно встретить запись
int m = (l + r) / 2;
, вместоint mid = l + (r - l) / 2;
.Но использование второго варианта является лучшей практикой, так как это помогает избежать переполнения, когда размер массива велик.
Например, если
l = 2147483647
иr = 2147483647
, суммаl
иr
будет равна 4294967294, что превышает максимальное значение, которое может хранитьint
, вызывая переполнение.С другой стороны, если вы используете
mid = l + (r - l) / 2;
это будет работать, как и ожидалось, потому что вычитание будет сделано первым, а результат будет равен нулю, поэтому деление будет равно нулю, а сложение вернет значениеl
.
Мета информация
Область:: 00 Алгоритм, 00 Снипеты для Java
Родитель:: Бинарный поиск
Автор::
Создана:: 2024-04-07