Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лк07 Сортировки.doc
Скачиваний:
81
Добавлен:
28.10.2018
Размер:
2 Мб
Скачать
☆

Формулировка задачи сортировки

Введем некоторые понятия и обозначения.

Частичным порядком на множестве S называется такое бинарное отношение , что для любых a, b и c из S выполняются следующие условия:

Пример 1. Отношение ≤ на множестве целых чисел (1≤2≤…≤n).

Пример 2. Отношение  включения множеств:

{0}{1}{2}{3}{1,2}{1,3}{2,3}{1,2,3}.

Отношение порядка “<”на множестве ключей вводится таким образом, чтобы для любых трех значений ключей a, b, c были выполнены условия:

  1. справедливо одно и только одно из соотношений a < b, a = b, a > b

  2. если a < b, и b < c, то a < c (транзитивность).

Сформулируем более четко задачу сортировки. Пусть надо упорядочить N элементов

X1, X2, ..., Xn.

Назовем их записями, выбранными из множества, на котором задан линейный порядок.

Каждая запись Xj имеет ключ Kj, который и управляет процессом сортировки. Помимо ключа запись может содержать дополнительную информацию, которая не влияет на процесс сортировки, но всегда присутствует в этой записи.

Требуется найти такую перестановку записей p1, p2, ..., pn, после которой ключи расположились бы в неубывающем порядке:

Kp(1)  Kp(2) ... Kp(n).

Сортировка называется устойчивой, если она удовлетворяет дополнительному условию, что записи с одинаковыми ключами остаются в прежнем порядке (предполагается, что элементы уже были отсортированы по некоторому вторичному ключу):

pi  pj для любых Kp(i)  Kp(j) и i < j.

В ряде случаев требуется физически перемещать записи в памяти так, чтобы ключи были упорядочены; в других случаях достаточно создать вспомогательную таблицу, которая некоторым образом описывает перестановку и обеспечивает доступ к записям в соответствии с порядком ключей.

Некоторые методы сортировки предполагают наличие элементов и -. Величина считается строго больше, а - строго меньше любого ключа:

- < Ki < для всех 1<= i <=N .

Эти величины используются в качестве граничных признаков.

Обычно сортировку подразделяют на два класса: внутреннюю и внешнюю. При внутренней сортировки все записи хранятся в оперативной памяти, таким образом, как правило, это сортировка массивов. При внешней сортировке – записи хранятся на внешнем запоминающем устройстве, это сортировка файлов.

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

Основное требование к методам сортировки – экономное использование доступной памяти. Это означает, что переупорядочение нужно выполнять «на том же месте», то есть методы пересылки элементов из одного массива в другой не представляют интереса.

Все методы сортировок будем классифицировать по их экономичности, т.е. по времени их работы.

Удобной мерой эффективности является подсчет числа С - необходимых сравнений ключей и М – пересылок (перестановок) элементов.

Достаточно хороший алгоритм затрачивает на сортировку N записей время порядка N*log(N). Простейшие алгоритмы сортировки которые мы рассмотрим в этой главе, обладают характеристикой порядка N2. Если N достаточно мало, то простые алгоритмы достаточно выгодно использовать в силу простоты их реализации.

Анализ методов сортировки очень полезен и с точки зрения обучения, так как с их помощью можно наглядно проиллюстрировать самые разные ситуации. По словам создателя языка Паскаль, Н. Вирта, "создается впечатление, что можно построить целый курс программирования, выбирая примеры только из задач сортировки".

Интересен этот класс алгоритмов еще и тем, что на нем наглядно демонстрируются богатейшие возможности программирования: насколько разными путями можно прийти к одной цели - получение упорядоченного массива! На множестве алгоритмов сортировки становится понятной необходимость сравнительного анализа алгоритмов и оценки их качества, критериями которого являются увеличение быстродействия и экономии памяти.

Практически каждый алгоритм сортировки можно разбить на три части:

- сравнение, определяющее упорядоченность пары элементов;

- перестановку, меняющую местами пару элементов;

- собственно сортирующий алгоритм, который осуществляет сравнение и перестановку элементов до тех пор, сока все элементы множества не будут упорядочены.