Метод предсортировки и слияния

В основе данного метода лежит следующий алгоритм: основной массив разбивается на два дочерних, в отношении каждого из которых осуществляется первичная сортировка. Затем отсортированные массивы сливаются, и полученный массив подвергается вторичной сортировке - в результате получаем отсортированный массив. Блок-схема данного метода приведена на рис. 3.12.

Метод максимумов

1) Просматривая массив от первого элемента, найти максимальный элемент и поместить его в последнюю ячейку промежуточного массива, а в основном массиве ячейка, содержащая найденный максимум, обнуляется.

2) Просматривая массив от первого элемента, найти максимальный элемент и поместить его в предпоследнюю ячейку промежуточного массива, а в основном массиве ячейка, содержащая найденный максимум, обнуляется.

3) И так далее.

Блок – схема метода приведена на рис. 3.12.

3.1.7. Шейкер[1]-сортировка

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

Работа этого метода показана на рис. 3.4.

Метод предсортировки и слияния - student2.ru

Рис. 3.4. Пример шейкер-сортировки

Достоинства: уменьшение избыточных повторных проверок.

Недостаток: не изменилось число обменов элементов.

3.1.8. Сортировка включениями с убывающим приращением
(сортировка Шелла)

Некоторое усовершенствование сортировки простыми включениями было предложено Д.Л. Шеллом в 1959 году.

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

Рассмотрим пример, представленный на рис. 3.5. На первом проходе отдельно группируются и сортируются все элементы, отстоящие друг от друга на четыре позиции. Этот процесс называется 4-сортировкой. В примере из восьми элементов каждая группа содержит ровно два элемента. После этого элементы вновь объединяются в группы с элементами, отстоящими друг от друга на две позиции, и сортируются заново. Этот процесс называется 2-сортировкой. Наконец, на третьем проходе все элементы сортируются обычной сортировкой, или 1-сортировкой.

Метод предсортировки и слияния - student2.ru

Рис. 3.5. Пример сортировки включениями с убывающим приращением

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

Сортировка с помощью дерева

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

44 55 12 42 94 18 06 67

\ / \ / \ / \ /

44 12 18 06

\ / \ /

12 06

\ /

На следующем шаге мы поднимаемся по ветви наименьшего элемента, заменяя его на элемент из противоположного узла вышестоящего уровня, или удаляем его, если он крайний.

44 55 12 42 94 18 __ 67

\ / \ / \ / \ /

44 12 18 __

\ / \ /

12 __

\ /

__

44 55 12 42 94 18 67

\ / \ / \ / /

44 12 18 67

\ / \ /

12 18

\ /

Повторив последний шаг несколько раз ,дерево пропадает.

Пирамидальная сортировка

Пирамида – двоичное дерево с упорядоченными листьями (корень дерева – наименьший элемент). Пирамиду можно представить в виде массива (смотри рис.3.6. ). Первый элемент пирамиды является наименьшим.

Метод предсортировки и слияния - student2.ru

Рис. 3.6. Массив, расположенный в виде бинарного дерева

Просеивание – построение новой пирамиды: помещение нового элемента в вершину дерева, далее он перемещается («просеивается») по пути, на котором находятся меньшие по сравнению с ним элементы, которые одновременно поднимаются вверх.

Например, возьмём исходную пирамиду, показанную на рис. 3.7,а, и расширим эту пирамиду «влево», добавив элемент h1=44. Значение 44 сначала меняется местами с 06, затем с 12, и так формируется дерево, показанное на рис. 3.7,б.

Метод предсортировки и слияния - student2.ru

Рис. 3.7 а) пирамида из семи элементов; б) просеивание элемента 44 через пирамиду.

Способ построения пирамиды, предложенный Р.У. Флойдом: пусть дан массив h1,…hn, тогда элементы hn/2+1…hn уже образуют пирамиду. Эти элементы составляют последовательность, которую можно рассматривать как нижний ряд соответствующего двоичного дерева (смотри рис. 3.8). Пирамида расширяется влево: на каждом шаге добавляется новый элемент и при помощи просеивания помещается на соответствующее место.




Метод предсортировки и слияния - student2.ru

Рис. 3.8. Построение пирамиды

67 X1..Xn

06 h1

/ \ / \

42 12 h2 h3

/ \ / \ / \ / \

55 94 18 44 h4 h5 h6 h7

h1 (наименьшее число) записывается в отсортированный массив, X записывается в h1 и просеивается. Это повторяется, пока не закончатся свободные элементы. После этого h1 записывается в отсортированный массив, а на его место записывается меньший элемент из следующего уровня, на место которого в свою очередь записывается меньший элемент следующего уровня этой ветви, и т.д. На место элемента из нижнего уровня записывается последний по счету элемент.

Пример пирамидальной сортировки представлен на рис. 3.9.

Метод предсортировки и слияния - student2.ru

Рис. 3.9. Пример пирамидальной сортировки

3.1.11. Быстрая сортировка (метод Хоора)

Этот метод разработан К. Хоором в 1962 году.

Суть метода заключается в том, чтобы выбрать случайным образом какой-то элемент, просмотреть массив, двигаясь слева направо, пока не будет найден элемент, больший выбранного. Затем просмотреть его справа налево, пока не будет найден элемент, меньший выбранного. После этого поменять эти элементы местами и продолжить «просмотр с обменом», пока два просмотра не встретятся где-то в середине массива. В результате массив разделится на две части: левую – с меньшими элементами, чем выбранный, и правую – с большими элементами. Разделив массив, нужно сделать то же самое с обеими полученными частями, затем с частями этих частей и т.д., пока каждая часть не будет содержать только один элемент.

Пример первого разделения массива проиллюстрирован на рис. 3.10.

Метод предсортировки и слияния - student2.ru

Рис. 3.10. Разделение

Преимущество: для сортировки уже разделенных небольших подмассивов легко применить какой-либо простой метод.

Недостаток: эффективность алгоритма быстрой сортировки определяется выбором случайного начального элемента.

Наши рекомендации