Лекция 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.