Исследовать один из наиболее распространенных методов поиска данных– бинарный (двоичный) поиск.
Общие сведения
Пусть –целочисленный массив и ; b – целое число. Рассмотрим задачу: выяснить, входит ли данное число в массив и если входит, то каково значение p, для которого ap = b? Эту задачу мы назовем задачей поиска элемента.
Областью поиска служит n-элементный ряд, предварительно отсортированный. Вначале диапазон поиска определяется граничными значениями Low = 1 и High = n. Строим первую «гипотезу», полагая, что искомое значение находится в позиции Test – где-то посередине между границами Low и High. Если проверка подтверждает это, то поиск успешно завершен. Если значение в позиции Test меньше искомого, нижней границей (Low) становится Test + 1, а если больше, то модифицируется верхняя (High) граница – для нее принимается значение, равное Test – 1. Описанный процесс постепенного сближения границ поиска с последующей проверкой среднего элемента повторяется многократно, завершаясь одним из двух исходов: либо нужное значение обнаруживается (успех), либо Low становится больше High (неудача).
Максимальное количество проверок, необходимое для завершения бинарного поиска (при любом исходе – удачном или неудачном), определяется по формуле , где ceil обозначает функцию, возвращающую ближайшее целое число, большее или равное ее аргументу. Другими словами, k есть наименьшее целое, такое, что 2k равно или больше, чем n + 1. Например, если n = 100, для сортировки потребуется не более семи проверок, поскольку 27 = 128.
Пример
Пусть b = 6, а массив а состоит из 10 элементов:
3 5 6 8 12 15 17 18 20 25.
Шаг 1. Найдем номер среднего элемента: (Low=1, High=10). Так как 6