Лабораторная работа №1 "Программирование алгоритмов сортировки"
1. Теоретические сведения
Сортировкой или упорядочиванием списка элементов называется распо-
ложение этих элементов по возрастанию или убыванию, согласно определен-
ному линейному отношению порядка (для определенности, нижеприведенные алгоритмы предполагают сортировку по возрастанию). Процесс сортировки,
проводимый любым методом, состоит из нескольких циклов, в каждом из кото-
рых осуществляется просмотр всей последовательности и производятся опре-
деленные операции с ее элементами. Один цикл обработки называется прохо-
дом. Элементы обычно называют записями. Записи содержат ключи, по значе-
ниям которых осуществляется сортировка. При внутренней сортировке все сор-
тируемые данные помещаются в оперативную память компьютера. Внешняя сортировка подразумевает перемещение больших блоков данных от устройств внешнего хранения информации к оперативной памяти и обратно.
Метод выбора (2.а)
В процессе первого прохода в исходном массиве находятся минимальный элемент, который помещается на место первого элемента. Первый элемент по-
мещается на место минимального. На втором и последующих проходах поиск и обмен повторяются для оставшихся после предыдущего прохода элементов (с
позициями: на втором проходе – со второй по последнюю, на третьем проходе – с третьей по последнюю и т.д.) до тех пор, пока не будет отсортирована вся по-
следовательность. Общее число сравнений составляет приблизительно 0,5 N2,
N – здесь и далее число элементов.
Метод обмена (2.б)
В процессе сортировки производится попарное сравнение соседних эле-
ментов. Если порядок следования соседних элементов нарушен, то они меня-
ются местами. В процессе первого прохода максимальный элемент попадает на последнее место и, следовательно, в последующих сравнениях не участвует.
Остальные элементы "всплывают" на одну позицию вверх (поэтому метод ча-
сто называют сортировкой "пузырьком"). На каждом следующем проходе рас-
сматривается последовательность для N-1, N-2 и т.д. элементов. Если при ка-
ком-либо проходе не было произведено ни одной перестановки, последователь-
ность отсортирована. Максимальное число сравнений составляет приблизи-
тельно 0,5 N2, среднее число сравнений пропорционально 0,25 N2, среднее число обменов – 0,25 N2.
Сортировка вставками (2.в)
Первый элемент исходного списка считается отсортированным списком длины 1. Двухэлементный отсортированный список создается добавлением второго элемента исходного списка в нужное место одноэлементного списка,
содержащего первый элемент. В целом, каждый новый элемент вставляется в подходящее место среди ранее упорядоченных элементов. Среднее число срав-
нений пропорционально N2.
Метод подсчета (2.г)
Метод основан на том, что k+1-ый элемент упорядоченной последова-
тельности превышает ровно k элементов, и следовательно занимает k+1-ую по-
зицию. В процессе сортировки на каждом i-ом проходе i-ый элемент исходной последовательности попарно сравнивается со всеми остальными элементами.
Инициализированный нулем перед началом прохода счетчик k увеличивается,
если i-ый элемент оказался больше текущего. Таким образом, порядковый но-
мер i-го элемента, по окончанию i-го прохода, равен k+1. Для сортировки по-
следовательности из N элементов требуется N проходов, на каждом из которых
выполняется N сравнений. Число сравнений равно N2. Приведенный метод подсчета можно использовать, если достоверно известно, что в исходно после-
довательности нет записей с одинаковыми ключами.
Метод Шелла (2.д)
Представляет собой модификацию метода вставок. Используются срав-
нения и перестановки элементов, но в отличие от метода вставок, в сравнении участвуют не соседние, а отстоящие друг от друга на определенном расстоянии элементы. При необходимости перестановки, элементы перемещаются скачком на данное расстояние, а не на одну позицию.
В одной из модификаций метода (в случае, предложенном Д. Шеллом)
шаг кратен степеням двойки. Вначале последовательность из N элементов де-
лится на N/2 групп, если N – четно, и на (N-1)/2 групп, если N – нечетно. Каж-
дая группа содержит по два элемента, если количество элементов было нечет-
ным, одна из групп содержит три элемента. Элементы каждой группы отстоят друг от друга на расстоянии N/2 или (N-1)/2. В течение первого прохода осу-
ществляется упорядочение элементов каждой группы методом вставок. Для осуществления следующего прохода шаг уменьшается вдвое (как и число групп), по отношению к предыдущему шагу (у дробных чисел берется целая часть). Процесс повторяется до тех пор, пока шаг не станет равным единице. В
этом случае методом вставок сортируется весь список (одна группа). С точки зрения программной реализации потребуется неоднократный вызов сортировки вставками с указанием, в качестве параметров (помимо исходного списка и числа элементов), индекса начального элемента группы и шага. Приблизитель-
ное число сравнений составляет N log2 N.
Сортировка по дереву (2.ж)
Процесс сортировки состоит из: фазы построения двоичного дерева поис-
ка и фазы обхода. Структура двоичного дерева задается с помощью связного
списка, каждый элемент которого может иметь, максимум, двух потомков (две ссылки). Двоичное дерево формируется по всем исходным элементам, по сле-
дующему правилу. Первый элемент исходной последовательности является первым узлом дерева. Следующий элемент последовательности сравнивается со значениями в узлах строящегося дерева, начиная с корня. Если значение те-
кущего элемента больше значения элемента в узле дерева, следует переме-
ститься вниз по правой ссылке от текущего узла, в противном случае – по левой ссылке. Перемещение по дереву продолжается до тех пор, пока не будет до-
стигнута свободная ссылка, после чего осуществляется вставка элемента в де-
рево. После формирования дерева необходимо провести процедуру смешанного обхода. Он заключается в рекурсивном посещении (чтении) узлов, начиная с корня: левого поддерева, узла, правого поддерева. В результате получается от-
сортированная последовательность. Среднее число сравнений aN log2 N, 1 < a
< 2.
Сбалансированное N-ленточное слияние (2.з)
Общей формой внешней сортировки является N-ленточное слияние. Для
N-ленточного слияния потребуется 2N магнитных лент и 2N лентопротяжных устройств (которые можно заменить 2N файлами на устройстве внешней памя-
ти). Исходная неупорядоченная последовательность размещается на первой магнитной ленте. Затем она разносится на N магнитных лент по следующему правилу: первая запись – на первую из N лент, вторая – на вторую, (N+1)-ая – снова на первую из N лент.
Сбалансированное N-ленточное слияние осуществляется в два этапа. На первом этапе из записей, хранящихся на каждой магнитной ленте, формируют-
ся упорядоченные цепочки. Так как все цепочки имеют одинаковую длину,
слияние называется сбалансированным. Упорядочение цепочки происходит в оперативной памяти одним из методов внутренней сортировки. Упорядоченные цепочки размещаются на N свободных магнитных лентах, после чего начинает-
ся второй этап сортировки – слияние. Процесс слияния осуществляется в не-
сколько циклов. После каждого цикла слияния длина упорядоченных цепочек увеличивается на N. В конечном итоге, формируется упорядоченная последова-
тельность из N составляющих. Собственно слияние осуществляется следую-
щим образом. Пусть имеются две цепочки длиной l, изначально упорядочен-
ные. Необходимо получить одну упорядоченную цепочку. Для этого: сравни-
ваются первые элементы двух цепочек, меньшая переписывается в результиру-
ющую цепочку; операция осуществляется с помощью трех счетчиков; после за-
писи в результирующую последовательность увеличивается на единицу счет-
чик результирующей последовательности и счетчик последовательности, в ко-
торой был обнаружен меньший элемент; действие повторяется до тех пор, пока один из счетчиков исходной последовательности не достигнет значения конца последовательности, после чего оставшиеся элементы другой последовательно-
сти дописываются в конец результирующей. Таким образом, будут упорядоче-
ны каждая из N магнитных лент.
Цель работы
Приобретение навыков реализации программ сортировки данных.
Задание
Осуществить программную реализацию сортировки информации задан-
ного вида, сбалансированным N-ленточным слиянием (в оперативной памяти)
Варианты:
Номер варианта |
Задание №1 |
Задание №2 |
|
|
|
1, 11, 21 |
2.а |
2.ж |
|
|
|
2, 12, 22 |
2.б |
2.з |
|
|
|
3, 13, 23 |
2.в |
2.д |
|
|
|
4, 14, 24 |
2.г |
2.д |
|
|
|
5, 15, 25 |
2.а |
2.ж |
|
|
|
6, 16, 26 |
2.б |
2.з |
|
|
|
7, 17, 27 |
2.в |
2.д |
|
|
|
8, 18, 28 |
2.г |
2.д |
|
|
|
9, 19, 29 |
2.а |
2.ж |
|
|
|
10, 20, 30 |
2.в |
2.з |
|
|
|