Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Бинарный поиск
Для работы данного метода нужен предварительно отсортированный массив. Этот метод особенно интересен, если исходный массив в ходе программы уже был отсортирован и нужно быстро найти в нем нужное значение, т.к. его работа, по сравнению с методом прямого перебора значительно эффективнее, особенно для больших массивов. Суть метода заключается в разделении (заранее отсортированного) массива на две равные части, а сравнение искомого значениея происходит с центральным элементом между этими частями. В зависимости от выполнения условия сравнения, например, если искомое значение меньше центрального элемента, то дальнейший поиск будет производиться только в левой части, повторяя аналогичные шаги. Таким образом в результате каждой последующей проверки, мы вдвое сужаем область поиска и т.д. Таким образом, пример алгоритма бинарного поиска выглядит так: Рис. 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; }
|