Бинарный поиск (двоичный поиск)

Постановка задачи: в неубывающем массиве целых чисел найти номер данного элемента или вывести сообщение, что такого элемента в массиве нет.

Сначала приведем листинг программы. Попробуйте самостоятельно понять суть бинарного поиска.

Так как бинарный (двоичный) поиск работает только с упорядоченными данными, то сначала генерируем неубывающий массив. Далее определяем границы поиска в массиве (это переменные low и up, которые первоначально охватывают весь массив) и анализируем центральный относительно этих границ элемент с номером i=(up+low)/2. Если он равен key, то элемент найден и процесс поиска прекращается из-за break. Если он меньше, чем key, то в силу неубывания элементов поиск следует продолжать в левой относительно центрального элемента части. Поэтому сужаем область поиска командой up=i-1. И снова определяем центральный элемент i=(up+low)/2, но уже для новой области.

Когда мы ищем слово в справочнике, то сначала открываем книгу приблизительно в середине и смотрим в какой из получившихся двух частей продолжить поиск. Эта идея из жизни и реализована в данной программе (справочник упорядочен по алфавиту).

Код написан на С++. Индексы массива от 0 до n-1, если размер массива равен n. Результат функции поиска равен -1, если элемент не найден, иначе индекс элемента (счет начинается с 0).

к списку задач     к списку алгоритмов