# Two ways to solve binary search

Покажу решение и коротко сравню его с альтернативным подходом.

## Задача

Дан отсортированный список чисел `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://yakihonne.com/article/naddr1qvzqqqr4gupzp9t0n9tjvtm0w6r6l5grs76w769yqqaj6c6jz8ehst80kcclzsn5qy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknjdf5vccx2wfe943rqetp956rqvnz95uxvvnx95mrwd33vvunxvtzxvexz9wa3xn) · [алгоритма](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-c1e3p-1kdk) · [число](https://dev.to/devnote2319/logging-pipeline-runs-without-noise-owga6-4o5l) · [показывает](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/is-prime-tests-mwbfcivo.md) · [работает](https://radicle.network/nodes/seed.pipapo.org/rad%3Az3eQNgvB6er3PmGkNTDNHEVbqac81/issues/b21f753418607b93da1b4af1ebeae6af1b6c59e7) · [альтернативным](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/quicksort-shagi-mwbdexga.md) · [учебной](https://ecency.com/@karelcerny7473/new-hd-indian-sex-video-download-e58d69) · [ручной](https://statics.pancake.vn/web-media-264/a0/b4/7b/05/8c24b4b8f758a964a6ca4888c1e7aea4d086439d5b380b6da3772bfd.pdf) · [коротко](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/sakayanagi-95ecbf.pdf) · [обычно](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/11/sammy-thighs-nude-d15b59.pdf) · [меньше](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/bubble-sort-oshibki-mwbl0xan.md) · [Выбор](https://privatebin.devol.it/?1f26a512644b2622#CD6CSZyAakv2ixEXYHY9gvRGbR6j539PXKPWnAbp2vnT) · [Полезно](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/11/event-24c628.pdf) · [реализации](https://dev.to/devnote2319/logging-pipeline-runs-without-noise-jxhlk-kbj) · [while](https://yakihonne.com/article/naddr1qvzqqqr4gupzpc7tpj5upp4d3vyszawxz9krdjcmpq3xd0m4aw3wpzvcksx7vhzsqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0ykkycekvdjrwd3j95uxgc3k956rvenz95ux2wtx94jnsvfjxvenxc35v56rw320kat) · [короче](https://dev.to/devnote2319/idempotent-publishing-jobs-zjpgk-3kmp) · [подходом](https://github.com/ozalopa956-cloud/text-normalize-py/issues/7) · [ручное](https://dev.to/devnote2319/keeping-link-blocks-stable-across-platforms-u4eln-217b) · [одинаковых](https://pastebin.com/ZbfWrUce) · [первый](https://pastebin.com/Gudz7ujK)

