Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

11.2. Быстрый вид 513

Если мы применяем уравнение снова, мы получаем t (n) = 23 т (n/23) + 3cn. В этом пункте, нас

должен видеть, что образец появляется, так, чтобы после применения этого уравнения i раз мы добрались

t (n) = 2it (n/2i) + icn.

Проблема, которая остается, тогда, должна определить, когда остановить этот процесс. Чтобы видеть, когда остановиться, вспомните, что мы переключаемся на закрытую форму t (n) = b, когда n1£, который происходит

когда 2i = n. Другими словами, это происходит, когда я = регистрирую n. Создание этой замены,

тогда, урожаи

t (n) = 2lognt (n/2log n) + (регистрируют n), cn

= nt (1) + cn регистрируются, n = nb + cn регистрируют n.

Таким образом, мы получаем альтернативное оправдание факта, что t (n) является O (n, регистрируют n).

11.2

Быстрый вид

Следующий алгоритм сортировки, который мы обсуждаем, называют быстрым видом. Как вид слияния, этот алгоритм также основан на парадигме делить-и-побеждать, но это использует эту технологию - nique несколько противоположным способом, поскольку вся тяжелая работа сделана перед рекурсивными вызовами.

Описание высокого уровня Быстрого Вида

Алгоритм быстрого вида сортирует последовательность S использование простого рекурсивного подхода.

Главная идея состоит в том, чтобы применить технику делить-и-побеждать, посредством чего мы делим S на подпоследовательности, повторяемся, чтобы сортировать каждую подпоследовательность, и затем объединить сортированные подпоследовательности простой связью. В частности алгоритм быстрого вида состоит из выполняющего трех шагов (см. рисунок 11.8):

1. Разделитесь: Если у S есть по крайней мере два элемента (ничто не должно быть сделано, если S имеет

ноль или один элемент), выберите определенный элемент x из S, который называют центром. Как обычная практика, выберите центр x, чтобы быть последним элементом в S. Удалите все элементы из S и поместите их в три последовательности:

L, храня элементы в S меньше, чем x

E, храня элементы в S равняются x G, храня элементы в S, больше, чем x.

Конечно, если элементы S все отличны, то E держит всего один элемент -

сам центр.

2. Повторитесь: рекурсивно последовательности вида L и G. 3. Завоюйте: Отложите элементы в S в заказе первой вставкой элементов

из L, затем те E, и наконец те G.

514 Глава 11. Сортировка, наборы и выбор

1. Разделение используя центр x.

E (= x)

2. Повториться. 2. Повториться.

L (<x) G (> x)

3. Связать.

Рисунок 11.8: визуальный схематический из алгоритма быстрого вида.

Как вид слияния, выполнение быстрого вида может визуализироваться посредством bi-дерева рекурсии не, названного деревом быстрого вида. Рисунок 11.9 суммирует выполнение алгоритма быстрого вида, показывая последовательности входа и выхода, обработанные в каждом узле дерева быстрого вида. Постепенному развитию дерева быстрого вида показывают 11.10 в цифрах, 11.11, и 11.12.

В отличие от вида слияния, однако, высота дерева быстрого вида, связанного с выполнением быстрого вида, линейна в худшем случае. Это происходит, например, если последовательность состоит из n отличных элементов и уже сортирована. Действительно, в этом случае, стандартный выбор центра, поскольку самый большой элемент приводит к подпоследовательности

L размера n- 1, в то время как у подпоследовательности E есть размер 1 и подпоследовательность, у G есть размер 0. В

каждая просьба быстрого вида на подпоследовательности L, размер уменьшается на 1. Следовательно,

высота дерева быстрого вида - n- 1.

Выполнение Быстрого Вида на множествах и списках

В Кодовом Фрагменте 11.5, мы даем псевдокодовое описание быстрого вида algo-

rithm, который эффективен для последовательностей, осуществленных как множества или связанные списки. algo-rithm следует за шаблоном для быстрого вида, данного выше, добавляя деталь просмотра входной последовательности S назад, чтобы разделить его на списки L, E и G элементов, которые являются соответственно меньше, чем, равный, и больше, чем центр. Мы выполняем этот просмотр назад, начиная с удаления последнего элемента в последовательности постоянно-разовая операция, независимая от того, осуществлена ли последовательность как множество или связанный список. Мы тогда повторяемся в списках L и G и копируем сортированные списки L, E и G назад к S. Мы выполняем этот последний набор копий в передовом направлении, так как в - serting элементы в конце последовательности постоянно-разовая операция, независимая от того, осуществлена ли последовательность как множество или связанный список.