freeCodeCamp/guide/russian/miscellaneous/freecodecamp-algorithm-bina.../index.md

74 lines
3.4 KiB
Markdown
Raw Normal View History

2018-10-12 20:00:59 +00:00
---
title: Freecodecamp Algorithm Binary Search Guide
localeTitle: Алгоритм Freecodecamp для двоичного поиска
---
Бинарный поиск - это алгоритм поиска, который находит позицию целевого значения в отсортированном массиве.
## пример
![Двоичный поиск](//discourse-user-assets.s3.amazonaws.com/original/2X/3/3cb9e4cc59081e1b0a19b716dbcfb6df97ac2b52.png)
На приведенной выше иллюстрации показана работа алгоритма бинарного поиска в отсортированном массиве, когда целевое значение равно **4** .
## Алгоритм
Двоичный поиск работает на отсортированных массивах. Бинарный поиск начинается с сравнения среднего элемента массива с целевым значением. Если целевое значение соответствует среднему элементу, возвращается его позиция в массиве. Если целевое значение меньше или больше среднего элемента, поиск продолжает нижнюю или верхнюю половину массива соответственно новому среднему элементу, исключая вторую часть из рассмотрения.
Псевдокод для алгоритма бинарного поиска выглядит следующим образом:
```
BinarySearch(A<a href='https://repl.it/CWZq/158' target='_blank' rel='nofollow'>0..N-1], value) {
low = 0
high = N - 1
while (low <= high) {
// invariants: value > A[i] for all i < low
value < A[i] for all i > high
mid = (low + high) / 2
if (A[mid] > value)
high = mid - 1
else if (A[mid] < value)
low = mid + 1
else
return mid
}
return not_found // value would be inserted at index "low"
}
```
## сложность
* Наихудшая производительность: **O (log n)**
* Лучшая производительность: **O (1)**
* Средняя производительность: **O (log n)**
* Худшая сложность пространства: **O (1)** для итеративного; **O (log n)** для рекурсивного.
## Реализация C ++
```
int binarySearch(int arr[], int value, int left, int right) {
int middle;
while (left <= right) {
middle = (left + right) / 2;
if (arr[middle] == value)
return middle;
else if (arr[middle] > value)
right = middle - 1;
else
left = middle + 1;
}
return -1;
}
```
: rocket: \[Run Code ## Python Implementation
```
def binary_search(l, value):
low = 0
high = len(l)-1
while low <= high:
mid = (low+high)//2
if l<a href='https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":rocket:"' target='_blank' rel='nofollow'>mid] > value: high = mid-1
elif l[mid] < value: low = mid+1
else: return mid
return -1
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ": Ракета:") [Код запуска](https://repl.it/CWZi/2)