Zvolíme některý prvek z kolekce (pokud možno s mediánovou hodnotou), nazveme ho pivot, a rozdělíme kolekci na dvě části tak, že v levé části budou prvky menší než pivot a v pravé části prvky větší než pivot. Pivot dáme mezi ně. (Prvky stejné jako pivot, tj. které jsou rovné pivotu, dáme např. do levé části.) Pokud výsledek takovéhoto "dělení" opět uložíme do nějaké kolekce, tak v ní máme nyní tři části:
Potom vezmeme každou z částí (napřed levou, pak pravou) a rekurzivně postup opakujeme. Tj. v dané části vybereme opět její pivot a rozdělíme ji (analogicky jako při prvním dělení) na dvě podčásti, v jedné budou prvky menší než tento pivot, ve druhé budou prvky větší než tento pivot.
Pokud má některá část už jen jeden prvek, považujeme ji za "setříděnou". Postup opakujeme, dokud nezískáme samé jednoprvkové části.
Pokud jsme toto pivotové "dělení" provedli tzv. in-place, tj. ve zdrojové kolekci, tak po provedení všech dělení až na jednoprvkové části je kolekce setříděna.
Poznámka: Jako pivot můžeme v každé části, na kterou chceme aplikovat "dělení", vybrat např. její poslední prvek (viz ilustrace).
Chceme např. setřídit takovouto kolekci čísel: 10, 0, 14, 2, -5, 12, 1
First level - pivot: 1 | ||||||
10 | 0 | 14 | 2 | -5 | 12 | 1 |
10 | 0 | 14 | 2 | -5 | 12 | 1 |
10 | 0 | 14 | 2 | -5 | 12 | 1 |
0 | -5 | 10 | 14 | 2 | 12 | 1 |
0 | -5 | 1 | 10 | 14 | 2 | 12 |
Second level LEFT part - pivot: -5 | ||||||
0 | -5 | 1 | 10 | 14 | 2 | 12 |
0 | -5 | 1 | 10 | 14 | 2 | 12 |
0 | -5 | 1 | 10 | 14 | 2 | 12 |
-5 | 0 | 1 | 10 | 14 | 2 | 12 |
Second level RIGHT part - pivot: 12 | ||||||
-5 | 0 | 1 | 10 | 14 | 2 | 12 |
-5 | 0 | 1 | 10 | 14 | 2 | 12 |
-5 | 0 | 1 | 10 | 14 | 2 | 12 |
-5 | 0 | 1 | 10 | 2 | 14 | 12 |
-5 | 0 | 1 | 10 | 2 | 12 | 14 |
Third level - left half of the RIGHT PART - pivot: 2 | ||||||
-5 | 0 | 1 | 10 | 2 | 12 | 14 |
-5 | 0 | 1 | 10 | 2 | 12 | 14 |
-5 | 0 | 1 | 10 | 2 | 12 | 14 |
-5 | 0 | 1 | 2 | 10 | 12 | 14 |
DONE |
Více informací: https://en.wikipedia.org/wiki/Quicksort