9.1 Quicksort
QuickSort je řadící algoritmus založený na podobné myšlence jako QuickSelect:
- Vybereme pivota a rozdělíme vstup na levou \(L\) (prvky menší než pivot), střední \(S\) (prvky rovné pivotu) a pravou \(P\) část (prvky větší než pivot).
- V seřazené posloupnosti budou vystupovat nejdříve prvky z \(L\), pak ty z \(S\) a nakonec prvky z \(P\)
- Rekurzivně tedy seřadíme levou \(L\) a pravou \(P\) část (střední \(S\) je sama od sebe seřazená).
- Výsledná posloupnost vznikne spojením \(L\), \(S\) a \(P\) za sebou
Algoritmus 9.1 (Quicksort)
Algoritmus Quicksort
Strom rekurzivních volání (SRV) QuickSortu
- V kořeni SRV máme celou posloupnost \(n\) prvků, na první hladině její levou a pravou část, na druhé hladině levé a pravé části těchto částí, a tak dále, až v listech triviální posloupnosti délky \(1\)
- Součet velikostí všech podproblémů v libovolné hladině SRV je tedy nejvýše \(n\)
- Rozkládání vstupu i spojování částí jsou operace v lineárním čase.
- V každém vrcholu SRV stráví algoritmus čas úměrný velikosti příslušného podproblému.
- Na jedné hladině SRV proto algoritmus stráví čas \(O(n)\)