Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 4_Сорт.doc
Скачиваний:
108
Добавлен:
15.02.2015
Размер:
1.85 Mб
Скачать

4.2. Сортировка подсчётом

Будем сначала полагать, что все ключи исходного массива различны.

Если ключ должен занимать в отсортированном по возрастанию массиве место , то это равносильно условию, что ровно дляэлементов выполняется условие. Поэтому сортировка сводится к подсчёту числавыполненных неравенств; после этого значениезаносится-м элементом массива, задающего упорядочение.

Заметим, что если иодин раз сравнивались при исследовании ключа, то сравнивать его повторно при исследовании ключанет необходимости. Кроме того не нужно сравнивать ключ с самим собой. Таким образом, достаточно обработать все пары индексовс условием.

Рис. 23.

Алгоритм сортировки подсчётом включает следующие этапы.

- Объявление массива с начальными нулевыми значениями

для подсчета ключей, меньших данного;

- внешний цикл по ;

- внутренний цикл по ;NB: всегда ;

- если , то

(а) увеличивается на единицу,

в противном случае, то есть при ,

(б) увеличивается на единицу.

В процессе сортировки данные не перемещаются, но затрачивается дополнительная память для хранения массива .

Если ключи могут иметь равные значения, то в теле внутреннего цикла будет реализовано действие (б), так что на единицу увеличится и , который был изначально правее, окажется правее, чеми после сортировки. Это означает устойчивость сортировки.

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

В этой группе методов элементы данных просматриваются по одному, и каждый новый элемент вставляется в подходящее место среди тех, что были упорядочены ранее. Таким образом, в процессе сортировки массив разделён на две части: отсортированную и неотсортированную. На каждой итерации очередной элемент неотсортированной части переходит в отсортированную часть.

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

4.3.1.Метод простых вставок

Перед рассмотрением элемента элементыпредполагаются уже упорядоченными, так что

.

сравнивается поочерёдно с до тех пор, пока не окажется, чтоследует либо оставить на месте (если), либо вставить междуи(если), либо, наконец, поставить крайним слева (если). Поскольку после вставки все элементыдолжны переместиться вправо (иногда говорят «вверх»), удобно совмещать в теле цикла операции сравнения и перемещения.

Алгоритм сортировки методом простых вставок содержит следующие этапы.

- внешний цикл по номеру очередного вставляемого эле-

мента , где ():

— запоминание вставляемого

элемента и его ключа;

- внутренний цикл по ():

- сравнение с(сейчас занимает позицию

):

- если , то перестановкаи:

;

- если , то принудительный выход

из цикла по .

- .

Трудоёмкость метода: поскольку для ключа равновероятно оказаться больше или меньше каждого из прежде упорядоченных ключей, то в среднем приходится выполнятьсравнений, и общее количество итераций даётся выражением

.