Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология программирования / ИТ / Лекции_Технология_прогр.doc
Скачиваний:
112
Добавлен:
17.05.2015
Размер:
848.38 Кб
Скачать

Алгоритм бинарного поиска

Если массив упорядочен по возрастанию (или убыванию) элементов, можно осуществить поиск быстрее, используя метод бинарного поиска. Идея метода: образец сравнивается со средним (по номеру) элементом массива, затем

  • если образец равен среднему элементу, то задача решена;

  • если образец больше среднего элемента, то это значит, что искомый элемент расположен ниже среднего элемента (между средним и нижним), и за новое верхнее значение среднее+1, а нижнее значение не меняется;

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

После того как определена часть массива, в которой может находиться искомый элемент, вычисляется новое среднее значение и поиск продолжается.

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

Время поиска при этом методе тоже увеличивается при увеличении длины массива, но не так быстро. Здесь зависимость времени от длины массива уже не линейная, а логарифмическая ().

Программу для реализации этого алгоритма напишите самостоятельно.

Рис. 6

Алгоритм сортировки методом «пузырька»

Под сортировкой массива подразумевается процесс перестановки элементов массива, целью которого является размещение элементов массива в определенном порядке.

Задача сортировки распространена в информационных системах и используется как предварительный этап задачи поиска, т. к. поиск в упорядоченном (отсортированном) массиве проводится намного быстрее, чем в неупорядоченном (см. рассмотренный ранее метод бинарного поиска).

Существует множество алгоритмов сортировки. Рассмотрим лишь некоторые из них.

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

Фрагмент программы, реализующий этот алгоритм, может выглядеть примерно так:

repeat

Changed:=FALSE; {пусть в текущем цикле нет обменов}

for k:=l to SIZE-1 do

if a[k] > a[k+l] then

begin {обменяем k-й и k+1-й элементы}

buf := a[k]; a[k] := a[k+l]; a[k+l] := buf;

changed := TRUE;

end;

until not changed;

{если не было обменов, значит массив отсортирован}

Следует отметить, что максимальное необходимое количество циклов проверки соседних элементов массива равно количеству элементов массива минус один. Возможно, что массив реально будет упорядочен за меньшее число циклов. Например, последовательность чисел 5 1 2 3 4, если ее рассматривать как представление массива, будет упорядочена за один цикл, и выполнение оставшихся трех циклов не будет иметь смысла. Поэтому в программу введена логическая переменная changed, которой перед выполнением очередного цикла присваивается значение FALSE. Процесс сортировки (цикл repeat) завершается, если после выполнения очередного цикла проверки соседних элементов массива (цикл for) ни один элемент массива не был обменен с соседним, и, следовательно, массив уже упорядочен.

Отметим также, что при сортировке нескольких связанных массивов наряду с обменом соседних элементов основного массива следует сразу же обменивать элементы сопутствующих. Например, в одном массиве содержатся фамилии студентов, в другом номер группы, в третьем номер телефона. Если нам требуется отсортировать список так, чтобы фамилии шли в алфавитном порядке, но при этом целостность данных не нарушалась, нам нужно, меняя местами фамилии, менять соответствующим образом и другие данные.

Очевидно, что чем больше элементов в массиве, тем дольше в среднем будет выполняться его сортировка. Более точно, при увеличении длины массива в n раз время увеличится в n2 раз (в n раз для внутреннего цикла и в n раз в среднем для внешнего), т. е. зависимость времени от длины массива квадратичная.

Соседние файлы в папке ИТ