
- •3. Алгоритмы сортировки
- •3.1. Сортировка массивов
- •3.1.1. Сортировка простыми включениями
- •3.1.2. Сортировка бинарными включениями (модифицированная сортировка простыми включениями)
- •3.1.3. Сортировка простым выбором
- •3.1.4. Сортировка простым обменом (метод пузырька)
- •3.1.5. Метод предсортировки и слияния
- •3.1.6. Метод максимумов
- •3.1.7. Шейкер1-сортировка
- •3.1.8. Сортировка включениями с убывающим приращением (сортировка Шелла)
- •3.1.9. Сортировка с помощью дерева
- •3.1.10. Пирамидальная сортировка
- •3.1.11. Быстрая сортировка (метод Хоора)
- •3.1.12. Цифровая распределяющая сортировка
- •3.2. Сортировка последовательных файлов
- •3.2.1. Простое слияние
- •3.2.2. Естественное слияние
- •3.2.3. Сбалансированное многопутевое слияние
- •3.2.4. Многофазная сортировка
- •3.3. Анализ алгоритмов
- •2. Некоторые элементы находятся не на своём месте
- •1 3 4 5 2
- •5 4 3 2 1
3.1.12. Цифровая распределяющая сортировка
Применяется для упорядочивания n-ричных чисел.
Идея: просматривая записи последовательно, распределяем их на группы с одинаковой последней цифрой. После этого группы снова объединяются в один массив в порядке возрастания последних цифр. Затем это же проделывается с получившимся массивом для второй с конца цифры, и так столько раз, какова разрядность чисел. При этом очередной проход не нарушает упорядоченности по уже обработанным разрядам.
Данный метод более сложный, но в месте с тем более экономичный.
На рис. 3.11 показано, как осуществляется такая сортировка для трехзначных чисел.
Рис. 3.11. Пример алгоритма цифровой распределяющей сортировки
Метод
прямого выбора
Метод
пузырька
Метод предсортировки и слияния
Метод максимумов
Рис. 3.12 Блок-схемы алгоритмов
3.2. Сортировка последовательных файлов
3.2.1. Простое слияние
Слияние означает объединение двух (или более) упорядоченных последовательностей в одну упорядоченную последовательность при помощи циклического выбора элементов, доступных в данный момент. Слияние — намного более простая операция, чем сортировка; она используется в качестве вспомогательной в более сложном процессе последовательной сортировки.
Метод сортировки простым слиянием состоит в следующем:
1. Последовательность аразбивается на две половиныbис.
2. Последовательности bиссливаются при помощи объединения отдельных элементов в упорядоченные пары.
3. Полученной последовательности присваивается имя а, и повторяются шаги 1 и 2; упорядоченные пары сливаются в упорядоченные четверки.
4. Предыдущие шаги повторяются: четверки сливаются в восьмерки, и весь процесс продолжается до тех пор, пока не будет упорядочена вся последовательность, ведь длины сливаемых последовательностей каждый раз удваиваются.
В качестве примера рассмотрим последовательность:
44 55 12 42 94 18 06 67
На первом шаге разбиение дает последовательности:
44 55 12 42
94 18 06 67
Слияние отдельных компонент (которые являются упорядоченными последовательностями длины 1) в упорядоченные пары дает:
44 94 /18 55/06 12/42 67
Новое разбиение пополам и слияние упорядоченных пар дают:
06 12 44 94 /18 42 55 67
Третье разбиение и слияние приводят к нужному результату:
06 12 18 42 44 55 67 94
3.2.2. Естественное слияние
Исходная последовательность элементов задана в виде файла с, который в конце работы должен содержать результат сортировки. Каждый проход состоит из фазы распределения, которая распределяет упорядоченные подпоследовательности поровну изсваиb,и фазы слияния, которая сливает упорядоченные подпоследовательности изаиbвс.Этот процесс показан на рис. 3.13.
Рис. 3.13. Фазы сортировки и проходы сортировки
В качестве примера на рис. 3.14 показан файл св исходном состоянии (строка 1) и после каждого прохода (строки 2-4).
17 |
31 |
’ 5 |
59 |
’13 |
41 |
43 |
67 |
’11 |
23 |
29 |
47 |
’ 3 |
7 |
71 |
’2 |
19 |
57 |
’37 |
61 |
5 |
17 |
31 |
59 |
’11 |
13 |
23 |
29 |
41 |
43 |
47 |
67 |
’ 2 |
3 |
7 |
19 |
57 |
71 |
’37 |
61 |
5 |
11 |
13 |
17 |
23 |
29 |
31 |
41 |
43 |
47 |
59 |
67 |
’ 2 |
3 |
7 |
19 |
37 |
57 |
61 |
71 |
2 |
3 |
5 |
7 |
11 |
13 |
17 |
19 |
23 |
29 |
31 |
37 |
41 |
43 |
47 |
57 |
59 |
61 |
67 |
71 |
Рис. 14. Пример сортировки естественным слиянием
В естественном слиянии участвуют 20 чисел. Требуются только три прохода. Сортировка заканчивается, как только число упорядоченных подпоследовательностей в сбудет равно 1.