# Two ways to solve binary search (part c88b)

У большинства учебных задач есть минимум два честных решения — сравним их.

## Задача

Дан отсортированный список чисел `arr` и число `target`. Найти его индекс или вернуть `-1`, если элемента нет.

## Решение

```python
def binary_search(arr: list[int], target: int) -> int:
    lo, hi = 0, len(arr) - 1
    while lo <= hi:
        mid = (lo + hi) // 2
        if arr[mid] == target:
            return mid
        if arr[mid] < target:
            lo = mid + 1
        else:
            hi = mid - 1
    return -1


print(binary_search([1, 3, 5, 7, 9, 11], 7))
```

## Как это работает

На каждом шаге диапазон поиска сокращается вдвое: если середина меньше цели — ищем справа, иначе слева. Отсюда и логарифмическая скорость.

## Пример работы

```text
3
```

## Сложность

O(log n) по времени, O(1) по памяти.


## Альтернативный подход

Ту же задачу часто решают иначе: например, через рекурсию вместо цикла или через стандартную библиотеку вместо ручной реализации. Альтернатива обычно короче, но первое «ручное» решение лучше показывает механику работы алгоритма. Полезно написать оба и сравнить на одинаковых тестах.

Выбор между решениями — это баланс читаемости и скорости: для учебной задачи важнее первый.

**Читайте также:**

[одинаковых](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/10/kamakurara-9b0e2c.pdf) · [меньше](https://drop.xtrafrancyz.net/selif/om7ylpf09i.pdf) · [механику](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/anna-anon-x-f2faeb.pdf) · [Найти](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/ngintip-stw-mandi-4cd5b1.pdf) · [поиска](https://pen.absturztau.be/oz63a0cb/gorodots-ka-45) · [показывает](https://statics.pancake.vn/web-media-264/b9/a9/a6/01/9bd65ed63b0242a3ab5a20b1154e2bef98aeceddfed8f38cedfe2784.pdf) · [середина](https://marieroux423.overblog.fr/2026/10/emerada.html) · [вернуть](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/brackets-tests-mvcl5b1g.md) · [важнее](https://sway.cloud.microsoft/ZBdnx3OMWSKRNCDq) · [цикла](https://tanphuplastic.com/%E9%BB%9B%E5%8D%9A%E6%8B%89%E7%9A%84%E6%88%BF%E9%97%B4cg?f=instapaper) · [сравнить](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/livu-if-a-9f8a8a.pdf) · [лучше](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [Полезно](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [справа](https://nowakpavel.wixsite.com/my-site-1/post/sexuele-voorlichting-1991-belgische-onderwijksfilm) · [памяти](https://samt2009.org/kittycute+forum?f=instapaper) · [обычно](https://discuss.tchncs.de/post/65444622) · [тестах](https://kappa.lol/v0yn7w) · [библиотеку](https://paste.rs/JJLWn) · [Альтернативный](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/digit-sum-tests-mvcpn0ro.md) · [слева](https://statics.pancake.vn/web-media-264/c4/74/db/ee/8e19fc5b43c5a7a284502f459ab0d5dbbbd484b8d7e702cfabf301ae.pdf) · [скорость](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [while](https://paste.rs/yFX9A) · [список](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-d0d735.pdf) · [алгоритма](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/dollcandy-eeaa70.pdf)

