Skip to content

Commit 4d578e9

Browse files
committed
Add binary search algorithm documentation and code
Added binarySearch.md with explanation and code sample, binarySearch.py with the implementation, and a related diagram binarySearch.png. Also added ruber.xml to project dictionaries.
1 parent c6298bd commit 4d578e9

4 files changed

Lines changed: 46 additions & 0 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.idea/dictionaries/ruber.xml

source/binarySearch.png

31.8 KB
Loading

templates/binarySearch.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
## Binary Search (Бинарный поиск)
3+
**Идея:** Делим отсортированный массив пополам и каждый раз отбрасываем ненужную половину.
4+
5+
![Binary Search](../source/binarySearch.png)
6+
- **Когда использовать:**
7+
- Когда массив/список **отсортирован**.
8+
- Нужно быстро найти элемент или проверить его наличие.
9+
- Примеры: поиск слова в словаре, поиск числа в отсортированном списке, задачи типа *«найди минимальное значение X, которое удовлетворяет условию»*.
10+
11+
- **Сложность:**
12+
- Время: **O(log n)**
13+
- Память: **O(1)** (итеративно) или **O(log n)** (рекурсивно).
14+
15+
- **Проблемы, которые решает:**
16+
- Поиск позиции элемента в массиве.
17+
- Оптимизационные задачи на *монотонные функции*.
18+
19+
## Код
20+
```python
21+
def binary_search(arr, target):
22+
left, right = 0, len(arr) - 1
23+
while left <= right:
24+
mid = (left + right) // 2
25+
if arr[mid] == target:
26+
return mid
27+
elif arr[mid] < target:
28+
left = mid + 1
29+
else:
30+
right = mid - 1
31+
return -1

templates/binarySearch.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Binary Search (бинарный поиск)
2+
def binary_search(arr, target):
3+
left, right = 0, len(arr) - 1
4+
while left <= right:
5+
mid = (left + right) // 2
6+
if arr[mid] == target:
7+
return mid
8+
elif arr[mid] < target:
9+
left = mid + 1
10+
else:
11+
right = mid - 1
12+
return -1
13+
14+

0 commit comments

Comments
 (0)