AlgoLab operace, ne sekundy

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Tři kvadratická třídění a čím se doopravdy liší

Všechna tři jsou O(n²) a přesto se chovají různě. Rozdíl je vidět nejlíp na tom, která část pole je už hotová.

vkládáním — krok 0 z 23Vlevo je setříděná část, která ale ještě není hotová — každý další prvek se do ní zasune.Zelené = na konečném místě. Ta hranice je celý rozdíl mezi těmi třemi.
Přepínej algoritmus a táhni krokem. Zelené sloupce jsou prvky, které jsou na konečném místě — a ta hranice roste u každého algoritmu odjinud.
bublinkovévkládánímvýběrem
hotové rostezpravazleva
porovnání (nejhůř)n(n−1)/2n(n−1)/2n(n−1)/2
porovnání (setříděné)n−1n−1n(n−1)/2
přesunů (nejhůř)n−1
stabilníanoanone

Tři věci z té tabulky, které stojí za zapamatování

1. Třídění výběrem nemá nejlepší případ. Vždycky prochází celý zbytek, takže setříděné pole ho stojí přesně tolik co obrácené. Je to jediný z těch tří, u kterého se dá dopředu říct přesný počet porovnání, aniž by se člověk podíval na data.

2. Zato dělá nejmíň přesunů ze všech. Nejvýš n−1 výměn, protože každý prvek položí na místo jednou a hotovo. Když je zápis drahý — paměť flash s omezeným počtem cyklů, položka přes síť — je to najednou ten nejrozumnější kvadratický algoritmus, ačkoli porovnání dělá stejně jako ostatní.

3. Třídění vkládáním je na skoro setříděných datech výborné. Když je každý prvek nejvýš k pozic od svého místa, stojí to O(n·k). Proto se nevyhodilo: je vestavěné uvnitř rychlých knihovních sortů jako jejich koncový případ. Kapitola 6 ukáže, od jaké velikosti.

Stabilita je vlastnost, na kterou se zapomíná, dokud nechybí. Stabilní třídění zachová vzájemné pořadí prvků, které jsou si rovné. Když se tabulka setřídí nejdřív podle jména a pak stabilně podle oddělení, vyjde seřazená podle oddělení a uvnitř podle jména — zadarmo. S nestabilním tříděním to první seřazení zmizí.

Bublinkové třídění: proč se pořád učí a proč se nepoužívá

Nemá žádnou výhodu proti třídění vkládáním — dělá tolik porovnání a víc přesunů. Učí se, protože je nejjednodušší na vysvětlení, a to je jeho jediná role. V produkčním kódu není důvod ho napsat.

Vzorce v této kapitole

n² — kvadratické třídění, nejhorší případ
C = n(n−1)/2 [—] kap. 4