
- •Глава 4. Сортировка в оперативной памяти
- •4.1. Исходные понятия
- •4.2. Сортировка подсчётом
- •4.3.1.Метод простых вставок
- •4.3.2. Метод бинарных вставок
- •4.3.3. Метод двухпутевых вставок
- •4.4. Обменные сортировки
- •4.4.1. Метод пузырька
- •4.4.2. Быстрая сортировка
- •4.4.3. Обменная поразрядная сортировка
- •4.5. Сортировки посредством выбора
- •4.5.1. Сортировка с использованием бесконечно большого ключа
- •4.5.2. Сортировка посредством простого выбора
- •4.5.3. Сортировка методом выбора из дерева
- •4.5.4. Пирамидальная сортировка
- •4.5.5. Сортировка методом слияния
- •4.5.6. Сортировка методом распределения
- •4.6. Аппаратная сортировка (Сортирующие сети)
4.3.2. Метод бинарных вставок
Результат проверки
неравенства
даёт наибольшую информацию, когда он
позволяет отбросить максимально
возможное число равновероятных вариантов
(см. [17]). В силу симметрии число
отбрасываемых вариантов следует по
возможности уменьшать вдвое.
При сортировке
бинарными вставками ключ
сравнивается с ключом
,
номер которого
занимает среднее положение в ряду уже
упорядоченных ключей
.
Если
нечётно, то
;
если
чётно, то можно выбрать в качестве
любой из двух номеров
или
.
После этого средний номер выбирается
уже в (два раза более коротком) ряду
,
если
,
либо в ряду
,
если
,
и т. д.
Этот метод экономит
затраты времени на сравнение ключей,
но не меняет количество перестановок
элементов, которое по-прежнему есть
.
4.3.3. Метод двухпутевых вставок
Этот метод ориентирован на минимизацию числа необходимых в среднем переписываний данных во время их сортировки.
Для размещения
отсортированного массива
отводится область свободной памяти, и
элемент
помещается в её середину. Место для
последующих элементов высвобождается
путём сдвигов влево или вправо, в
зависимости от того, в какую сторону
число необходимых сдвигов меньше. По
сравнению с методом простых вставок
машинное время экономится примерно
наполовину, хотя усложняется программа.
Пример. Для совокупности данных
метод двухпутевых вставок приводит последовательно к следующим спискам:
Метод Шелла (сортировка с убывающим смещением). В этом методе экономия в среднем машинного времени достигается за счёт того, что переставляются не соседние, а значительно более удалённые друг от друга элементы. В то время как перестановка соседних элементов, нарушающих упорядоченность, уменьшает общее количество инверсий в массиве лишь на единицу, перестановка удалённых друг от друга элементов в методе Шелла может уменьшить его на большее число.
На промежуточных стадиях сортируются либо сравнительно более короткие массивы, либо уже сравнительно хорошо упорядоченные массивы с малым числом инверсий.
Если, например,
исходный список содержит
элементов, то сначала — первый проход
― упорядочиваются восемь двучленных
списков со смещением на
:
.
Затем на втором
проходе упорядочиваются четыре
четырёхчленных списка со смещением на
:
На третьем проходе
упорядочиваются два восьмичленных
списка со смещением на
:
и
.
Наконец, на последнем
шаге сортируется весь список со смещением
.
В общем случае
набор из
убывающих смещений
для разбивки списка на части может
выбираться разными способами и выступает
в роли настраиваемого параметра.
Сортировка внутри каждой из групп
элементов, отстоящих на
позиций, может осуществляться, например,
методом простых вставок.
Алгоритм сортировки методом Шелла содержит следующие этапы.
╔
- внешний цикл
по
― перебор смещений:
-
― работа с очередным значением смещения;
- вложенный цикл
по
― для сортиро-
вки элементов,
отстоящих на
позиций:
- ― номер крайнего справа от
элемента из
уже упорядоченных в группе;
- номера остальных последовательно уменьшаются на
;
- ― данные вставляемого элемента;
он будет продвигаться влево, пока не дойдёт до
элемента с меньшим значением ключа;
- вложенный
цикл по
с шагом
пока
;
- если
то:
-
:
ставится на место
;
- принудительный
выход из цикла по
;
- ― сдвиг вправо элементов с бóльшим
значением ключа с целью высвобождения
места вставляемому элементу.
╚