Рис. 8. Метод Хоара
Теперь начинаем изменять индекс i = i + 1 и сравнивать элементы ki и k0. Продолжаем увеличение i до тех пор, пока не получим условие ki > k0, после чего следует обмен ki и k0 (см.шаг5). Снова возвращаемся к индексу j, уменьшаем его. Чередуя уменьшение j и увеличение i, продолжаем этот процесс с обоих концов к середине до тех пор, пока не получим i = j (см.шаг 7).
В отличие от предыдущих рассмотренных сортировок уже на первом этапе имеют место два факта: во-первых, базовый ключ k0 = 40 занял своё постоянное место в сортируемой последовательности; во-вторых, все элементы слева от k0 будут меньше него, а справа- больше него. Таким образом, по окончании первого этапа имеем:
21, 11, 32 40 57, 83, 75, 64
левая часть правая часть
Указанная процедура сортировки применяется независимо к левой и правой частям.
Сложность метода Хоара O(n log2n).









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



1 2
1 - первое сравнение
2 - второе сравнение
Пример: Дано исходное множество { 2, 4, 6, 3, 5, 7 }

В результате будет получено упорядоченное множество { 2,3,4,5,6,7 }
Для оценки эффективности алгоритмов используется функция сложности алгоритма, которая обозначается заглавной буквой “О”, в круглых скобках записывается аргумент. Например, функция сложности O(n2) читается как функция сложности порядка n2. Функция сложности алгоритма – это функция, которая определяет количество сравнений, перестановок а так временные и ресурсные затраты на реализацию алгоритма.
Функция сложности принимает следующий ряд значений:
Функция
сложности
Чем правее на оси расположена функция сложности, тем сложнее алгоритм.
Для каждого из перечисленных методов сортировки провести анализ временных затрат для списков различной размерности.
Для проведения лабораторной работы необходимо выполнить следующие действия.
1. Вызвать систему Sort_new, включающую в себя сортировку неупорядоченных списков в линейных и нелинейных структурах.
Путь к файлу: D:\ИПОВС\АиСД\SORT\Sort_new.exe
Система работает в диалоговом режиме с использованием “меню”. Вся необходимая информация во время работы системы отображается на экране дисплея и не требует специальных пояснений.
Основные функции системы
K - конец работы;
? - выдача краткого сообщения о командах;
U – задание условий для генерации неупорядоченного массива;
G - генерации неупорядоченного массива;
P – вывод массива;
W – вывод времени сортировки, количества элементов массива.
Сортировка методом:
1 – простого обмена;
2 – бинарной вставки;
3 – простой вставки;
4 – челночной;
5 – простого выбора;
6 – слиянием;
7 – Шелла;
8 – Хоара;
9 – пирамиды;
Esc – аварийное прерывание выполнения функции.
Краткое описание функции
U– задание условий для генерации неупорядоченного массива (задаются число элементов и границы элементов неупорядоченного массива). Заданные условия сохраняются до следующего вызова функции “U”;
G – генерация неупорядоченного массива, необходима перед каждой сортировкой;
P – вывод массива в текущем состоянии : неупорядоченный (до сортировки) или упорядоченный (после неё);
W - вывод времени сортировки ;
I – 9 – методы сортировки;
Для указанных в лабораторной работе методов сортировки провести следующие исследования:
a) выполнить сортировку массива из N чисел (варианты заданий даны в приложении ; номер варианта соответствует порядковому номеру фамилии студента в списке группы). Результаты занести в таблицу 1.
Таблица 1
|
Метод |
|
||
|
Количество элементов сортируемого массива N |
N1 |
N2 |
N3 |
|
Время сортировки t, c |
t1 |
t2 |
t3 |
2. Провести исследование методов сортировки упорядоченных списков с использованием программы SORTALL.
Путь к файлу: D:\ИПОВС\АиСД\SORT\Sortall.exe
Результаты занести в таблицу 1.
3. Провести исследование методов сортировки с использованием программ
WinSort и Sort.
4. Оценить сложность рассмотренных методов сортировки;
а) провести анализ отклонения полученной в результате эксперимента
сложности алгоритма от теоретической;
б) построить графические зависимости времени сортировки от количества
элементов сортируемого массива.
Требования к отчёту
Отчёт должен содержать:
конспект лабораторной работы;
примеры сортировки ;
результаты выполнения работы;
выводы по работе;
Контрольные вопросы
Что понимается под сортировкой?
2. Каковы особенности сортировки: вставкой, выбором, обменом , Шелла,
Хоара, турнирной, пирамидой?
3. Что включает в себя понятие сложности алгоритма?
4. В чём состоит методика анализа сложности алгоритмов сортировки?
Литература
1. Колдаев В.Д., Поддубная Л. М., Полосухин Б.М. Методы сортировки .
М.:МИЭТ, 1985.
2. Колдаев В.Д., Поддубная Л. М., Полосухин Б.М. Лабораторный практикум по
курсу « Теория алгоритов и вычислительные методы » М.:МИЭТ, 1988
3. Кнут Д. Искусство программирования для ЭВМ. Т. 3. Сортировка и поиск.
М. : Мир, 2000.
4. Т. Кормен, Ч. Лейзерсон, Р. Ривест «Алгоритмы: построение и анализ».
М.: МЦНМО, 2000.
5. Вирт Н. Алгоритмы и структуры данных.: Пер. С англ. - М.: Мир, 2001.
6. Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си.
Учеб. пособие. М : Финансы и статистика, 2004.
Приложение
Варианты заданий
|
Вариант |
n1 |
n2 |
n3 |
Составить программу |
|
1,15 |
1000 |
4000 |
6000 |
Простая вставка |
|
2,16 |
800 |
3000 |
7000 |
Сортировка слиянием |
|
3,17 |
2000 |
5000 |
6800 |
Метод Шелла |
|
4,18 |
1500 |
3500 |
6000 |
Простой выбор |
|
5,19 |
1000 |
2800 |
8500 |
Метод Хоара |
|
6,20 |
500 |
2500 |
6500 |
Бинарная вставка |
|
7,21 |
900 |
3000 |
8500 |
Шейкерная сортировка |
|
8,22 |
1200 |
2000 |
7500 |
Простая вставка |
|
9,23 |
2500 |
3500 |
6500 |
Шейкерная сортировка |
|
10,24 |
1600 |
2800 |
8800 |
Метод Шелла |
|
11,25 |
2200 |
3400 |
7200 |
Простой выбор |
|
12,26 |
1900 |
2700 |
8000 |
Метод Хоара |
|
13,27 |
1300 |
3500 |
6000 |
Бинарная вставка |
|
14,28 |
1700 |
2800 |
7500 |
Сортировка слиянием |
Предусмотреть в программе учет времени сортировки для указанных значений n1, n2, n3. Для сортировок Шелла, Хоара, пирамидальной значения n1, n2, n3
удвоить. Составить программу, реализующую один из методов сортировки.
Произвести расчет функции сложности разработанного алгоритма по полученным временным затратам.