Алгоритм на псевдокоде
Обозначим n – количество элементов в S
a, b – рабочие списки
c=(c0, c1) – массив из двух очередей
p – предполагаемый размер серии
q – фактический размер серии в списке a
r – фактический размер серии в списке b
m – текущее количество элементов в списках a и b
i – номер активной очереди
<Расщепление (S, a, b, n)>
p:=1
DO (p < n)
<инициализация очередей c0, c1>
i:=0, m:=n
DO (m > 0)
IF (m ≥ p) q:=p ELSE q:=m FI
m:= m – q
IF (m ≥ p) r:=p ELSE r:=m FI
m:= m – r
<слияние(a, q, b, r, ci )>
i:=1–i
OD
a:=c0.Head, b:=c1.Head
p:=2p
OD
c0.Tail → next:=NIL
S:=c0.Head
При инициализации очереди обнуляются указатели, указывающие на начало и на конец очереди, т.е. очередь становится пустой.
Трудоёмкость методапрямого слияния определяется сложностью операции слияния серий. На каждой итерации происходит ровно n перемещений элементов списка и не более n сравнений. Как нетрудно видеть, количество итераций равно . Тогда
C < n , M=n +n.
Дополнительные n перемещений происходят во время начального расщепления исходного списка. Асимптотические оценки для М и С имеют следующий вид
С=О(n log n), М=О(n log n) при n → ∞.
Метод обеспечивает устойчивую сортировку.При реализации для массивов, метод требует наличия второго вспомогательного массива, равного по размеру исходному массиву. При реализации со списками дополнительной памяти не требуется.
6.2 Цифровая сортировка
Другим методом сортировки последовательностей является цифровая сортировка. Пусть дана последовательность из S чисел, представленных в m – ичной системе счисления. Каждое число состоит из L цифр d1d2…dL, 0 ≤ di ≤ m – 1, i=1..L. Сначала числа из списка S распределяются по m очередям, причём номер очереди определяется последней цифрой каждого числа. Затем полученные очереди соединяются в список, для которого все действия повторяются, но распределение по очередям производится в соответствии со следующей цифрой и т.д.
Пример. Отсортировать последовательность 31 03′ 20 02 03″ 33 30 21 методом цифровой сортировки. Числа представлены в четверичной системе счисления.
S : | 31 | 03′ | 20 | 02 | 03″ | 33 | 30 | 21 |
Q0 : | ||||||||
Q1 : | ||||||||
Q2 : | ||||||||
Q3 : | 03′ | 03″ | ||||||
S : | 20 | 30 | 31 | 21 | 02 | 03′ | 03″ | 33 |
Q0 : | 02 | 03′ | 03″ | |||||
Q1 : | ||||||||
Q2 : | 20 | 21 | ||||||
Q3 : | 30 | 31 | 33 | |||||
S : | 02 | 03′ | 03″ | 20 | 21 | 30 | 31 | 33 |
Рисунок 23 Цифровая сортировка
Дата добавления: 2022-02-05; просмотров: 260;