- •Глава 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.2. Сортировка подсчётом
Будем сначала
полагать, что все ключи исходного
массива
различны.
Если ключ
должен занимать в отсортированном по
возрастанию массиве место
,
то это равносильно условию, что ровно
для
элементов выполняется условие
.
Поэтому сортировка сводится к подсчёту
числа
выполненных неравенств; после этого
значение
заносится
-м
элементом массива
,
задающего упорядочение.
Заметим, что если
и
один раз сравнивались при исследовании
ключа
,
то сравнивать его повторно при исследовании
ключа
нет необходимости. Кроме того не нужно
сравнивать ключ с самим собой. Таким
образом, достаточно обработать все пары
индексов
с условием
.




Рис. 23.
Алгоритм сортировки подсчётом включает следующие этапы.
╔
- Объявление
массива
с начальными нулевыми значениями
для подсчета
ключей, меньших данного;
- внешний цикл
по
;
- внутренний
цикл по
;NB:
всегда
;
- если
,
то
(а)
увеличивается на единицу,
в противном
случае, то есть при
,
(б)
увеличивается на единицу.
╚
В процессе сортировки
данные не перемещаются, но затрачивается
дополнительная память для хранения
массива
.
Если ключи могут
иметь равные значения, то в теле
внутреннего цикла будет реализовано
действие (б), так что на единицу увеличится
и
,
который был изначально правее, окажется
правее, чем
и после сортировки. Это означает
устойчивость сортировки.
4.3. Сортировки вставками
В этой группе методов элементы данных просматриваются по одному, и каждый новый элемент вставляется в подходящее место среди тех, что были упорядочены ранее. Таким образом, в процессе сортировки массив разделён на две части: отсортированную и неотсортированную. На каждой итерации очередной элемент неотсортированной части переходит в отсортированную часть.
Сортировка вставками обычно применяется в ситуациях, когда уже имеется ранее отсортированный массив, к которому время от времени добавляются новые элементы.
4.3.1.Метод простых вставок
Перед рассмотрением
элемента
элементы
предполагаются уже упорядоченными, так
что
.
сравнивается
поочерёдно с
до тех пор, пока не окажется, что
следует либо оставить на месте (если
),
либо вставить между
и
(если
),
либо, наконец, поставить крайним слева
(если
).
Поскольку после вставки все элементы
должны переместиться вправо (иногда
говорят «вверх»), удобно совмещать в
теле цикла операции сравнения и
перемещения.
Алгоритм сортировки методом простых вставок содержит следующие этапы.
╔
- внешний цикл
по номеру
очередного вставляемого эле-
мента
,
где (
):
-
— запоминание вставляемого
элемента и его ключа;
- внутренний
цикл по
(
):
- сравнение
с
(
сейчас занимает позицию
):
- если
,
то перестановка
и
:
;
- если
,
то принудительный выход
из
цикла по
.
-
.
╚
Трудоёмкость
метода:
поскольку для ключа
равновероятно оказаться больше или
меньше каждого из прежде упорядоченных
ключей, то в среднем приходится выполнять
сравнений, и общее количество итераций
даётся выражением
.
