Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4 курс / Практика / Лабораторная работа №1 по дисциплине ТП

.pdf
Скачиваний:
11
Добавлен:
17.04.2015
Размер:
223.04 Кб
Скачать

Лабораторная работа №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.з