
- •Лабораторная работа №9.
- •1. Теоретические сведения:
- •1.1. Методы сортировки
- •1.2. Сортировки массивов
- •2. Сортировки обменом
- •2.1. Сортировка простым обменом (метод пузырька)
- •2.2. Сортировка простым обменом с флагом
- •2.3. Сортировка простым обменом с границей
- •2.4. Шейкер-сортировка
- •2.5. Быстрая сортировка
- •3. Сортировки включениями
- •3.1. Сортировка простым включением
- •3.2. Сортировка бинарными вставками
- •3.3. Сортировка Шелла
- •4. Сортировки выбором
- •4.1. Сортировка простым выбором
- •4.2. Пирамидальная сортировка
- •5. Сравнительный анализ сортировок
- •6. Контрольные вопросы
Лабораторная работа №9.
Тема: Алгоритмы сортировок массивов данных.
Цель работы: Знакомство с основными алгоритмами сортировок массивов данных, классификация этих алгоритмов в соответствии с их эффективностью.
Используемые программные средства: Delphi.
1. Теоретические сведения:
1.1. Методы сортировки
Под сортировкой
обычно понимают процесс целенаправленной
перестановки элементов данных в
определенном порядке по возрастанию
или убыванию согласно определенным
линейным отношениям их порядка, таким
как отношения
или
для чисел. Цель сортировки – облегчить
в дальнейшем поиск элемента в
отсортированной (упорядоченной)
совокупности элементов. Это напоминает
поиск элемента в словаре, телефонном
справочнике, ведомостях и так далее.
Методы сортировки очень нужны при обработке данных. С сортировкой связаны многие фундаментальные приемы построения алгоритмов. Сортировка является идеальным примером огромного разнообразия алгоритмов, которые исполняют одну и тую же задачу, многие из которых в некотором смысле являются оптимальными, а большинство имеет некоторые преимущества по сравнению с остальными. Поэтому на примере сортировки можно убедиться в необходимости сравнительного анализа алгоритмов. Здесь можно увидеть, как при помощи усложнения алгоритма можно получить существенное увеличение эффективности при сравнении с более простыми и очевидными алгоритмами.
Зависимость выбора алгоритма от структуры данных – явление довольно частое, и в случае сортировки это особо сильно ощущается, поэтому методы сортировки обычно разделяют на две категории:
сортировка данных типа массив;
сортировка последовательных файлов.
Эти два класса часто называют внутренней и внешней сортировкой, поскольку массивы размещаются в оперативной памяти быстрого доступа к каждому элементу, а последовательные файлы сохраняются в более медленной, но более емкой памяти, когда доступ имеем только к текущему элементу.
Сортировка строк – это ранжирование данных строкового типа по алфавиту (фактически по номеру составляющих строку символов в ASCII-коде).
Отметим, что сортировка строк или элементов файла с прямым (а не последовательным) доступом во всем напоминает сортировку массивов, поскольку доступ имеем к каждому элементу.
Введем систему
обозначений, которую будем использовать
в дальнейшем. Пусть нам даны элементы
,
,
…,
.
Сортировка по
возрастанию (убыванию) означает
перестановку этих элементов в таком
порядке:
,
,
…,
,
что при заданной функции упорядочения
справедливы отношения:
(или наоборот
).
Обычно функция
упорядочения не подсчитывается по
какому-то специальному правилу, а
присутствует в каждом элементе в виде
явной компоненты (поля элемента), которую
называют ключом элемента. Таким образом,
для представления элемента
особенно хорошо подходит структура
записи. Для дальнейшего рассмотрения
материала определим тип item,
который будет использоваться в алгоритмах
сортировки так:
Const n = ...;
Type inf = record
...
end ;
item = record
key : integer;
Zmest : inf; {описание «других компонентов»}
end;
Index = 0..n;
«Другие компоненты» – это все существенные данные об элементе. Поле key – ключ, и служит только для идентификации элемента. Но если мы говорим об алгоритмах сортировки, ключ для нас – единственная существенная компонента, и у нас нет необходимости определять остальные. Тип ключа может быть любым типом, для которого заданы отношения всеобщего порядка «больше или равно» («меньше или равно»).
Введём еще такое обозначение:
Var A: array [1..n] of item;
Метод сортировки будем называть устойчивым, если относительный порядок элементов с одинаковыми ключами не изменяется при сортировке. Устойчивость сортировки часто бывает желательна, если элементы упорядочены (отсортированы) по каким-то второстепенным ключам, т.е. по свойствам, которые не отражены в первоначальном ключе.
Разберем подробно некоторые интересные алгоритмы сортировки.