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

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

(a)

(b)

Рисунок 11.9: дерево быстрого вида T для выполнения алгоритма быстрого вида на последовательности с восемью элементами: (a) входные последовательности обработан в каждом узле T; (b) последовательности продукции произведен в каждом узле T. Центр, используемый на каждом уровне рекурсии, показывают в смелом.

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

(a) (b)

(c) (d)

(e) (f)

Рисунок 11.10: Визуализация быстрого вида. Каждый узел дерева представляет пере - рукописное требование. Узлы, оттянутые с пунктирными линиями, представляют звонки, которые еще не были сделаны. Узел, оттянутый с толстыми линиями, представляет бегущую просьбу. Пустые узлы, оттянутые с тонкими линиями, представляют законченные требования. Остающиеся узлы представляют приостановленные требования (то есть, активные просьбы, которые ждут ребенка в - призвание, чтобы возвратиться). Отметьте шаги дележа, выполненные в (b), (d), и (f). (Продолжается в рисунке 11.11.)

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

(g) (h)

(i) (j)

(k) (l)

Рисунок 11.11: Визуализация выполнения быстрого вида. Отметьте побеждать шаг, выполненный в (k). (Продолжается в рисунке 11.12.)

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

(m) (n)

(o) (p)

(q) (r)

Рисунок 11.12: Визуализация выполнения быстрого вида. Были опущены несколько просьб быть - подросток (p) и (q). Отметьте побеждать шаги, выполненные в (o) и (r). (Продолженный от рисунка 11.11.)

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

Алгоритм QuickSort (S):

Вход: последовательность S осуществленный как множество или связанный список Продукция: последовательность S в сортированном заказе

если S.size ()1£ тогда

возвратитесьS уже сортирован в этом случаеp¬ S.back () .element () Центр

Позвольте L, E, и G быть пустыми основанными на списке последовательностями

в то время как! S.empty () делаютпросматривают S назад, деля его на L, E, и G

если S.back () .element () <p тогда

L.insertBack (S.eraseBack ())

еще, если S.back () .element () = p тогда

E.insertBack (S.eraseBack ())

ещепоследний элемент в S больше, чем p

G.insertBack (S.eraseBack ())

QuickSort (L) Повторяются на элементах меньше, чем p

QuickSort (G) Повторяются на элементах, больше, чем p

в то время как! L.empty () делаюткопируют назад к S сортированные элементы меньше, чем p

S.insertBack (L.eraseFront ())

в то время как! E.empty () делаюткопируют назад к S элементы, равные p

S.insertBack (E.eraseFront ())

в то время как! G.empty () делаюткопируют назад к S сортированные элементы, больше, чем p

S.insertBack (G.eraseFront ())

возвратитесьS находится теперь в сортированном заказе

Кодовый Фрагмент 11.5: быстрый вид для входной последовательности S осуществленный со связанным списком или множеством.