Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Бинарный поиск






 

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

Суть метода заключается в разделении (заранее отсортированного) массива на две равные части, а сравнение искомого значениея происходит с центральным элементом между этими частями. В зависимости от выполнения условия сравнения, например, если искомое значение меньше центрального элемента, то дальнейший поиск будет производиться только в левой части, повторяя аналогичные шаги. Таким образом в результате каждой последующей проверки, мы вдвое сужаем область поиска и т.д.

Таким образом, пример алгоритма бинарного поиска выглядит так:

Рис. 2.1. Блок-схема Бинарного поиска

 

long BinaryFind(long array[], long size, long What)

{

long i;

long M; // вспомогательная переменная для определения принадлежности к тому или иному

// диапазону поиска

long Found = -1; // найденная позиция

short Lb = 0; // нижняя граница диапазона поиска

short Ub = size-1; // верхняя граница диапахона поиска

 

// цикл поиска бинарным методом

do {

M = (Lb + Ub)/2; //находим середину диапазона поиска

// искомое число находится в первой половине диапазона поиска?

if (What < array [M])

Ub = M - 1; //если да, то присваиваем новую верхнюю границу нового

//диапазона поиска

else { //если нет, то

//искомое число находится во второй половине диапозона поиска?

if (What > array[M])

Lb = M + 1; //если да, то присваиваем новую нижнюю границу нового

//диапазона поиска

else { //если нет, т.е. если число совпало с искомым, то..

Found = M+1; //выводим на экран позицию,

//в которой было найдено искомое число

break; //выходим из цикла поиска

}

}

} while (Lb< =Ub);

return Found;

}

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.