- •1) Справедливо одно и только одно из соотношений
- •Сортировка вставками
- •Двухпутевые вставки
- •1.3. Сортировка с убывающим шагом (метод Шелла, алгоритм d)
- •Вставка в список
- •Обменная сортировка
- •Метод пузырька (“обменная сортировка выбором” или “метод распространения”)
- •Шейкер-сортировка
- •Параллельная сортировка Бэтчера
- •“Быстрая сортировка”
- •Выбор из дерева
- •3.2.1. “Заглядывание вперед” при выборе из дерева (Айверсон)
- •Пирамидальная сортировка (алгоритм h)
- •Сортировка слиянием
- •Двухпутевое слияние (Алгоритм m)
- •4.1.1. Естественное двухпутевое слияние (Алгоритм n)
- •Сортировка простым двухпутевым слиянием (Алгоритм s)
- •Сортировка посредством слияния списков
4.1.1. Естественное двухпутевое слияние (Алгоритм n)
“Свечка” сжигается с двух концов.
-
Сортировка простым двухпутевым слиянием (Алгоритм s)
Алгоритм простого двухпутевого слияния очень напоминает алгоритм N.
На практике имеет смысл комбинировать этот алгоритм с простыми вставками. Вместо первых четырех просмотров алгоритма можно простыми вставками отсортировать группы скажем их 16 элементов, исключив таким образом довольно расточительные вспомогательные операции связанные со слиянием коротких файлов.
-
Сортировка посредством слияния списков
В случае внутреннего слияния связанное распределение памяти имеет бесспорное преимущество перед последовательным распределением: требуется меньше памяти и программа работает на 10-20% быстрее.
Рассмотрим теперь предыдущие алгоритмы с точки зрения структур данных. Почему нам необходима память под 2N, а не под N записей? Причина относительно проста: мы работаем с четырьмя списками переменного размера (два “входных списка” и два “выходных списка” в каждом просмотре). Но в любой момент времени половина памяти не используется, и после некоторого размышления становится ясно, что в действительности для наших четырех списков следовало бы воспользоваться связанным распределением памяти.
Добавление N полей связи, как правило, выгоднее, чем добавление пространства еще для N записей. Также мы можем сэкономить и время.