Сортировка Хоара с выбором медианного элемента
Улучшенные методы сортировки Сортировка Шелла Сортировка Шелла — алгоритм сортировки, являющийся усовершенствованным вариантом сортировки вставками. Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определённом расстоянии друг от друга. Иными словами — это сортировка вставками с предварительными «грубыми» проходами. Сортировка Шелла была названа в честь её изобретателя — Да Шелла, который опубликовал этот алгоритм в 1959 году. Выбор длин промежутков - Первоначально используемая Шеллом последовательность длин промежутков: - предложенная Хиббардом последовательность: - предложенная Седжвиком последовательность: - Наиболее часто используемая последовательность шагов -
Комбинированная сортировка (сортировка «расческой»)
Комбинация пузырька и сортировки Шелла. На каждом шаге сравниваются значения отстоящие друг от друга на заданное значение шага
Пирамидальная сортировка
Пирамида – это частично упорядоченное двоичное дерево, элементы которого расположены в узлах дерева по следующему правилу – каждый элемент родительского узла обязательно больше элементов, расположенных в дочерних узлах. Следующий рисунок представляет пирамиду из 15 элементов:
Рис. 1 Элементы дерева легко представляются в виде массива – пусть родительский узел имеет индекс
Т.к. корневой элемент элемент пирамиды всегда является максимальным элементом, то процесс пирамидальной сортировки можно описать следующим образом: поменять верхний элемент пирамиды с нижним элементом и рассматривать в дальнейшем не
1. KeyDown(N,X); // Построение пирамиды на исходном массиве x.
2. X[1] ßà X[N]; // Обмен первого элемента пирамиды с последним 3. L = N-1; // Изменение размерности пирамиды 4. Пока (L>1) // пока пирамида не пуста KeyDown(N-1,X); X[1] ßà X[L]; L = L-1; 5. Конец.
Рассмотрим процесс построения пирамиды на произвольном массиве:
Рис.2 N = 15. Для элементов, находящихся на нижнем уровне не существует дочерних элементов, т.е. эти элементы могут не проверяться на выполнение правила пирамиды, индексы этих элементов от N/2+1 до N. Поэтому построение начинается с элемента с номером N/2, в примере это x[7] = 3, сравним этот элемент с наибольшим из элементов x[14] и x[15], вторая нижняя пирамида остается без изменения, третья и четвертая пирамиды изменяются (см рис. 3).
Рис.3 Далее рассматриваем пирамиды с узлами во 2-м и 3-м элементах:
Рис. 4
Рис.5
На рис. 4 – 5 изображен процесс построения пирамиды из произвольного массива. Очевидно, что процедура KeyDown(N,X) должна зависеть еще от одного параметра – номера элемента, для которого строится пирамида. В общем случае для построения пирамиды с корнем в L-том элементе необходимо выполнять следующие действия: происходит продвижение по дереву вниз, элемент с номером L меняется местами с большим из своих потомков, алгоритм прекращает работу, когда элемент в позиции L больше своих потомков, или когда достигнут нижний уровень.
Полный алгоритм пирамидальной сортировки выглядит следующим образом:
1. L = (N/2) +1; 2. Пока L>1 L = L-1; KeyDown(L,N,X); // Построение пирамиды на исходном массиве 3. N1 = N; 4. Пока N1>1 V = x[1]; x[1] = x[N1]; x[N1] = v; // Выталкивание максимального элемента пирамиды в конец массива N1 = N1 – 1; // Изменение размера пирамиды KeyDown(L,N1,X); 5. Конец.
Сортировка Хоара Значение какого-нибудь элемента, обычно центрального, принимается за значение опорного элемента. Просматриваются элементы массива. При движении слева-направо ищем элемент больше или равный опорному. А при движении справа-налево ищем элемент меньше или равный опорному. Найденные элементы меняются местами и продолжается встречный поиск.
После этого массив окажется разделенным на две части. В первой находятся элементы меньше либо равные X, а справа - больше либо равные X. Далее алгоритм рекурсивно выполняется для правой и левой частей. Сортировка Хоара с выбором медианного элемента Можно улучшить быструю сортировку, выбирая средний элемент таким образом, чтобы его значение было бы действительно близким к серединному значению массива. Для этого можно пользоваться двумя стратегиями: 1. Выбор среднего значения осуществляется случайным образом (с использованием датчиков случайных чисел и информации о размерности массива). Т.к. разделяющий элемент выбирается при каждом вызове процедуры, случайный выбор может быть наиболее правильным и оградит от появления наихудшего случая – когда медианный элемент оказывается наименьшим или наибольшим. 2. Вторая стратегия состоит в случайном выборе 3-х элементов, по одному из начального, конечного и среднего интервалов сортируемого подмассива. Как разделяющий элемент используется среднее из этих трех чисел.
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2026 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|