
Лекция 9
Типовые алгоритмы
-
С ортировка ряда чисел
Сортировка – это упорядочение (размещение) чисел по возрастанию или по убыванию их значений.
Существует несколько различных способов решения этой задачи, однако чаще всего используются:
-
метод смежных пар (метод "пузырька"),
-
метод поиска наименьшего (наибольшего) числа ряда.
Метод смежных пар
Алгоритм, реализующий метод смежных пар, основан на сравнении двух соседних чисел с последующей их перестановкой в случае, если они расположены не в требуемой очередности.
На рис.8 приведен
алгоритм сортировки заданного ряда
чисел
по возрастанию. Для регулярного сравнения
двух соседних чисел предусматривается
циклический процесс. В заголовке цикла,
в качестве параметра цикла, используется
адрес числа
с его областью изменения от
доk
=
.
Здесь следует обратить внимание на то,
что правая граница области изменения
параметра цикла i
равна не n,
а n-1.
Это объясняется тем, что при сравнении
двух соседних чисел адрес первого числа
определяется значением параметра цикла
i,
а адрес второго числа вычисляется
добавлением единицы (i+1).
Если бы параметр цикла имел бы свое
последнее значение n,
а не n-1,
то при i
= n
адрес второго числа определялся бы как
i=
n+1,
а это уже выходит за пределы рассматриваемого
ряда, и числа с таким адресом нет. Поэтому,
чтобы исключить такую ситуацию, последнее
значение параметра цикла принимается
на единицу меньше.
В теле цикла
происходит сравнение значений двух
соседних чисел
и
,
и в случае их неправильного расположения
осуществляется их взаимная перестановка
с помощью промежуточной переменной
.
Переменная
используется с целью исключения потери
значения одного из чисел при перестановке.
Факт перестановки фиксируется с помощью
переменной
,
которая играет роль индикатора, путем
установки ей значения равной единице.
Если же числа расположены в требуемой
очередности, то их перестановка не
производится. После завершения каждого
цикла, на последнее место перемещается
самое большое число из чисел, рассматриваемых
в этом цикле.
Кроме
этого, проверяется состояние индикатора
.
Если его значение равно единице, то это
означает, что хотя бы одна перестановка
в завершившемся цикле была, и, следовательно,
необходимо совершить еще один цикл для
сравнения соседних чисел, но без
последнего числа, которое и так уже
расположено на нужном месте. Исключение
последнего числа из рассмотрения, после
завершения очередного цикла, осуществляется
операцией k
= k
–1. Это
позволяет экономить машинное время,
так как нет никакого смысла проверять
размещение уже расположенного на нужном
месте числа.
–
+ +
–
Рис. 8 Блок – схема сортировки чисел по возрастанию
методом смежных пар
После этого все
начинается сначала. Индикатор
устанавливается в стартовое состояние
со значением нуль, и в цикле производится
поочередное сравнение двух соседних
чисел. Такие циклы будут повторяться
до тех пор, пока не обнаружится, что
после завершения очередного цикла
индикатор
не поменял своего начального значения
0
на 1.
И это будет означать, что в процессе
циклической операции не было ни одной
перестановки, а, следовательно, числа
расположились в требуемой последовательности,
то есть ряд отсортирован. Таким образом,
алгоритм позволяет повторять циклические
операции столько раз, сколько будет
необходимо для завершения процесса
сортировки.
Сортировка ряда чисел по убыванию выполняется аналогично. В этом случае необходимо в операции сравнения соседних чисел знак " > " заменить знаком " < ".
Метод смежных пар
экономичен с точки зрения расхода
машинного времени. Если исходный ряд
уже сортирован в требуемой последовательности,
то достаточно выполнить только один
проверочный цикл, чтобы убедиться, что
индикатор
не поменял своего начального значения
0.