Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. В 2 ч. Ч. 2.pdf
Скачиваний:
0
Добавлен:
24.11.2025
Размер:
1.34 Mб
Скачать

Л а б о р а т о р н а я р а б о т а № 9 АЛГОРИТМЫ СОРТИРОВОК МАССИВОВ ДАННЫХ

Цель работы: знакомство с основными алгоритмами сортировок массивов данных, классификация этих алгоритмов в соответствии с их эффективностью.

Используемые программные средства: Borland Delphi.

9.1.Теоретические сведения

9.1.1.Методы сортировки

Под сортировкой обычно понимают процесс целенаправленной перестановки элементов данных в определенном порядке по возрастанию или убыванию согласно определенным линейным отношениям их порядка, таким как отношения или для чисел. Цель сортировки – облегчить в дальнейшем поиск элемента в отсортированной (упорядоченной) совокупности элементов. Это напоминает поиск элемента в словаре, телефонном справочнике, ведомостях и т.д.

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

Зависимость выбора алгоритма от структуры данных – явление довольно частое, и в случае сортировки это особо сильно ощущается, поэтому методы сортировки обычно разделяют на две категории:

сортировка данных типа массив;

сортировка последовательных файлов.

Эти два класса часто называют внутренней и внешней сортировкой,

поскольку массивы размещаются в оперативной памяти быстрого доступа к

129

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

Сортировка строк – это ранжирование данных строкового типа по алфавиту (фактически по номеру составляющих строку символов в ASCII-коде).

Отметим, что сортировка строк или элементов файла с прямым (а не последовательным) доступом во всем напоминает сортировку массивов, поскольку доступ имеем к каждому элементу.

Введем систему обозначений, которую будем использовать в дальнейшем. Пусть нам даны элементы a1 , a2 , …, an .

Сортировка по возрастанию (убыванию) означает перестановку этих элементов в таком порядке: ak1 , ak2 , …, akn , что при заданной функции упорядочения f справедливы отношения: f (ak1 ) f (ak2 ) ... f (akn ) (или

наоборот f (ak1 ) f (ak2 ) ... f (akn ) ).

Обычно функция упорядочения не подсчитывается по какому-то специальному правилу, а присутствует в каждом элементе в виде явной компоненты (поля элемента), которую называют ключом элемента. Таким образом, для представления элемента ai особенно хорошо подходит структура записи. Для дальнейшего рассмотрения материала определим тип item, который будет использоваться в алгоритмах сортировки так:

Const n = ...; Type inf = record

...

end ; item = record

key : integer;

Zmest : inf; {описание «других компонентов»} end;

Index = 0..n;

«Другие компоненты» – это все существенные данные об элементе. Поле key – ключ, и служит только для идентификации элемента. Но если мы говорим об алгоритмах сортировки, ключ для нас – единственная существенная компонента, и у нас нет необходимости определять остальные. Тип ключа может быть любым

130

типом, для которого заданы отношения всеобщего порядка «больше или равно» («меньше или равно»).

Введём еще такое обозначение:

Var A: array [1..n] of item;

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

Разберем подробно некоторые интересные алгоритмы сортировки.

9.1.2. Сортировки массивов

Основное требование для методов сортировки массивов – экономное использование памяти. Это значит, что перераспределение элементов нужно выполнять на том же месте {in site}, и поэтому методы, которые пересылают элементы из массива А в массив В для нас не представляют интереса.

Таким образом, выбирая метод сортировки и руководствуясь критериями экономии памяти, классификацию алгоритмов мы будем проводить в соответствии с их эффективностью, это значит экономией времени и быстротой действия. При этом будем подсчитывать С необходимое количество сравнений ключей и М пересылок элементов (что отнимает много времени). Это будут функции от n – числа сортируемых элементов.

Методы, сортирующие элементы in site, можно разбить на три основных класса в зависимости от заложенного в их основе приема (базового алгоритма):

сортировка обменом;

сортировка включениями;

сортировка выбором.

Рассмотрим методы сортировки массивов в соответствии с этой

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

131