- •1.Основные понятия эис
- •19. Классификация алгоритмов
- •Классификация Алгоритмов
- •20. Абстрактные типы данных (массивы, связанные списки, выделение памяти)
- •Абстрактные типы данных
- •Элементарные Структуры Данных
- •Массивы
- •Связанные списки
- •Выделение Памяти
- •21. Стеки, очереди, деревья
- •Очереди
- •Деревья
- •Терминология
- •22. Математические характеристики деревьев
- •Свойства
- •23. Обход деревьев
- •Обход Деревьев
- •Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •25. Критерии эффективности алгоритмов (формирование, поиск последовательного масиива)
- •26. Критерии эффективности алгоритма ступенчетого поиска
- •27. Сортировка методом Шелла Сортировка Шелла
- •28. Сортировка простым включением
- •29. Приоритетные очереди
- •30. Радикс сортировка Радикс Сортировка
- •Сортировка Радикс Обменом
- •Прямая Радикс Сортировка
- •Свойства Радикс Сортировок
- •31. Рекурсия Рекурсивные определения
- •Рекурсивные процедуры
- •Итерация и рекурсия
- •32. Рекурсивный обход деревьев, удаление рекурсии Рекурсивный Обход Дерева
- •Удаление Рекурсии
- •33. Элементарные методы сортировки и их характеристики Элементарные Методы Сортировки
- •Правила Игры
- •Сортировка Выбором
- •Сортировка Вставкой
- •34. Простейшие алгоритмы сортировки (методом пузырька, сортировка выбором, шейкер сортировка, ростировка Шелла), сравнение простых методов сортировки. Пузырьковая Сортировка
- •Характеристики Простейших Сортировок
- •Сортировка Файлов с Большими Записями
- •Сортировка Шелла
- •Подсчет Распределения
- •35. Алгоритмы быстрой сортировки, разрядная сортировка Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •36. Пирамидальная сортировка Пирамидальная сортировка
- •37. Сортировка слиянием (простое слияние, двухпутевое слияние, рекурсивный алгоритм слияния) Сортировка слиянием
- •Простое слияние
- •Y 1 2 3 4 5 6 7 8
- •Естественное двухпутевое слияние
- •Рекурсивный алгоритм слияния
37. Сортировка слиянием (простое слияние, двухпутевое слияние, рекурсивный алгоритм слияния) Сортировка слиянием
Исторически метод слияния является одним из первых методов, предложенных для сортировки на ЭВМ еще в 1954 году, автором его является Джон фон Нейман.
Слияние означает объединение двух или более упорядоченных массивов в один упорядоченный массив. Например, слияние двух массивов – [5 8 9] и [1 3 4 10] дает массив [1 3 4 5 8 9 10]. Сделать это можно, сравнив два наименьших элемента, вывести наименьший из них, а затем повторить эту процедуру. Необходимо позаботиться о действиях на случай когда один из массивов будет исчерпан.
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
|
|
|
|
|
|
|
выбираем 1
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
1 |
|
|
|
|
|
|
выбираем 3
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
1 |
3 |
|
|
|
|
|
выбираем 4
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
1 |
3 |
4 |
|
|
|
|
выбираем 5
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
1 |
3 |
4 |
5 |
|
|
|
выбираем 8
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
1 |
3 |
4 |
5 |
8 |
|
|
выбираем 9
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
1 |
3 |
4 |
5 |
8 |
9 |
|
выбираем 10
5 |
8 |
9 |
|
|
|
|
1 |
3 |
4 |
10 |
|
|
|
1 |
3 |
4 |
5 |
8 |
9 |
10 |
Слияние намного более простая процедура, чем сортировка, так как общий объем работы по существу пропорционален количеству элементов m+n, но при этом используется дополнительный массив.
Алгоритм двухпутевого слияния реализован в следующей программе для отсортированных массивов x[1..m],y[1..n] с результирующим массивомz[1..n+m]. Небольшое упрощение введено добавлением в конец исходных файлов искусственных стражейxm+1=yn+1=.
procedureMerge( x : VectorM; y : VectorN;varz: VectorNM);vari, j, k: integer;begini := 1; j := 1; x[m+1] := MaxInt; y[n+1] := MaxInt;fork := 1toN+Mdoifx[i] <= y[j]thenbeginz[k] := x[i]; Inc(i)endelsebeginz[k] := y[j]; Inc(j)end;end;
Простое слияние
Алгоритм слияния, предложенный фон Нейманом, упорядочивает пары соседних чисел. Затем упорядоченные пары сливаются в упорядоченные четверки, восьмерки и т.д. Для хранения упорядоченных серий используется вспомогательный массив Y.
X |
1 |
7 |
3 |
6 |
4 |
2 |
8 |
5 |
Y |
1 |
7 |
3 |
6 |
2 |
4 |
5 |
8 |
X |
1 |
3 |
6 |
7 |
2 |
4 |
5 |
8 |
Y |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Этот алгоритм называется иногда вверх-направленным слиянием, учитывая направление сливаемых пар.
При слиянии можно выбирать не соседние пары, а элементы, стоящие на концах массива. Алгоритм простого двухпутевого слияния берет элементы с двух концов исходного массива, сливает их в упорядоченные пары и отправляет по очереди в два конца выходного массива.
X17 3 6 4 2 85
Y1 52 36 48 7
X1 5 7 86 4 3 2