
- •Введение
- •Классификация методов сортировки
- •Основные методы внутренней сортировки
- •Сортировка выбором
- •Сортировка «методом пузырька»
- •Сортировка вставками
- •Улучшенная сортировка простыми вставками
- •Сортировка Шелла
- •Пирамидальная сортировка
- •Шаг 1: построение пирамиды
- •Шаг 2: сортировка
- •Быстрая сортировка
- •Разделение массива
- •Общий алгоритм
- •Модификации кода и метода
- •Поразрядная сортировка
- •Поразрядная сортировка для списков
- •Поразрядная сортировка для массивов
- •Эффективность поразрядной сортировки
- •Результаты тестирования
- •Сравнение времени сортировок
- •Методы внешней сортировки
- •Прямое слияние
- •Естественное слияние
- •Сбалансированное многопутевое слияние
- •Многофазная сортировка
- •Улучшение эффективности внешней сортировки за счет использования основной памяти
- •Библиографический список
- •Оглавление
- •Приложение Классификация методов сортировки
Введение
Пожалуй, никакая другая проблема не породила такого количества разнообразнейших решений, как задача сортировки. К сожалению, нельзя сказать, что существует некий "универсальный", наилучший алгоритм. Однако, имея приблизительные характеристики входных данных, можно подобрать метод, работающий оптимальным образом.
Для того чтобы обоснованно сделать такой выбор, рассмотрим параметры, по которым будет производиться оценка алгоритмов.
Времясортировки: основной параметр, характеризующий быстродействие алгоритма.
Память: ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. При оценке используемой памяти не будут учитываться место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы.
Устойчивость: устойчивая сортировка не меняет взаимного расположения равных элементов. Такое свойство может быть очень полезным, если они состоят из нескольких полей, а сортировка происходит по одному из них.
-
1
a
3
q
1
b
1
c
2
z
Исходные данные
-
1
a
1
b
1
c
2
z
3
q
Пример работы устойчивой сортировки
Рис. 1
На рис. 1 приведен пример устойчивой работы алгоритма. Взаимное расположение равных элементов с ключом 1 и дополнительными полями "a", "b", "c" осталось прежним: элемент с полем "a", затем - с "b", затем - с "c".
-
1
c
1
b
1
a
2
z
3
q
Пример работы неустойчивой сортировки Рис. 2
На рис. 2 приведен пример неустойчивой работы алгоритма. Взаимное расположение равных элементов с ключом 1 и дополнительными полями "a", "b", "c" изменилось.
Естественность поведения: эффективность метода при обработке уже отсортированных или частично отсортированных данных. Алгоритм ведет себя естественно и работает лучше, если учитывает эту характеристику входной последовательности.
В общей постановке задача ставится следующим образом. Пусть есть последовательность a0, a1... anи функция сравнения, которая на любых двух элементах последовательности принимает одно из трех значений: меньше, больше или равно. Задача сортировки состоит в перестановке членов последовательности таким образом, чтобы выполнялось условие:ai <= ai+1, для всехiот0доn.
x |
y |
Рис. 3
struct element {
field x;
field y;
};
Если значение функции сравнения зависит только от поля x, тоxназывают ключом, по которому производится сортировка, или ключом сортировки. На практике в качествеxчасто выступает число, а полеyхранит какие-либо данные, никак не влияющие на работу алгоритма.
Тип данных ключа должен включать операции сравнения ("=", ">", "<", ">=" и "<="). Задачей сортировки является преобразование исходной последовательности в последовательность, содержащую те же записи, но в порядке возрастания (или убывания) значений ключа.
Поскольку сортировка основана только на значениях ключа и никак не затрагивает оставшиеся поля записей, можно говорить о сортировке массивов ключей.