Problematika řazení – základní algoritmy a jejich složitost.
... abeceda, nad kterou je dáno řazení
... posloupnost (slovo) nad abecedou
Cílem je nalézt permutaci takovou, že posloupnost je setříděná, tj.
- na místě - pro řazení se nepoužívá žádná další datová struktura (např. další pole)
- stabilní - v seřazené posloupnosti je zachováno pořadí rovnocenných prvků
- přirozený - rychleji zpracuje (částečně) seřazenou množinu, u nepřirozeného to nehraje roli
- interní - všechna data jsou k dispozici v paměti
- externí - další prvky přichází v průběhu řazení
- složitost
- časová složitost (dále jako ) viz okruh 7 - Časová náročnost algoritmů
- paměťová složitost
a. Postupné rozšřování setříděné části
b. Záměnu dvojic po sobě jsdoucích prvků
c. Divide and Conquer
d. Sorting by distribution
- Radix sort
- Bucket sort
Anglicky | Česky | Nejlepší | Průměrně | Nejhorší | Dodatečná pamět | Stabilní | Přirozené | Metoda |
---|---|---|---|---|---|---|---|---|
Selection sort | Řazení výběrem | O(n²) | O(n²) | O(n²) | O(1) | zprav. ne | ne | výběr |
Insertion sort | Řazení vkládáním | O(n) | O(n²) | O(n²) | O(1) | ano | ano | vkládání |
Bubble sort | Bublinkové řazení | O(n) | O(n²) | O(n²) | O(1) | ano | ano | záměna |
Merge sort | Řazení slučováním | O(n log n) | O(n log n) | O(n log n) | O(log n) | ano | ano | slučování |
Quicksort | Rychlé řazení | O(n log n) | O(n log n) | O(n²) | O(log n) | ne | ne | záměna |
V každém kroku vybere z nesetříděné části nejmenší prvek a vloží nakonec setříděné části.
Příklad:
- 6, 5, 2, 4, 8
- 2, 5, 6, 4, 8
- 2, 4, 6, 5, 8
- 2, 4, 5, 6, 8
- 2, 4, 5, 6, 8
- 2, 4, 5, 6, 8
Vyberu první prvek z nesetříděné části a zařadím ho na správné místo v setříděné části.
Příklad:
- 6, 5, 2, 4, 8
- 6, 5, 2, 4, 8
- 5, 6, 2, 4, 8
- 2, 5, 6, 4, 8
- 2, 4, 5, 6, 8
- 2, 4, 5, 6, 8
pro téměř seřazenou posloupnost ...
Nesetříděnou posloupnost procházím shora dolů a porovnávám dvojice po sobě jdoucích prvků; dvojice mimo pořadí zaměním. Tím se na přední pozici dostane vždy nejmenší prvek.
Příklad:
- 6, 5, 2, 4, 8
- 2, 6, 5, 4, 8
- 2, 4, 6, 5, 8
- 2, 4, 5, 6, 8
- 2, 4, 5, 6, 8
- 2, 4, 5, 6, 8
Stejné jako bubble sort, akorát procházím od zdola nahoru.
Kombinace Bubble Sort a Sinking Sort. Střídá se procházecí pořadí.
Vstupní posloupnost se rekurzivně dělí na dvě poloviny až jsou poslopnosti délky jedna. Následuje zpětný chod, tj. sestavení setříděné posloupnosti. Při zpětném chodu se sloučí dvě fronty do jedné (nejmenší prvek je vždy na začátku jedné ze dvou front).
Ukázka algoritmu merge sort
Zvolíme tzv. pivota a posloupnost rozdělíme na dvě části. Jedna z nich obsahuje prvky menší nebo rovny pivotu a druhá obsahuje prvky větší než pivot. Na tyto dvě posloupnosti se rekurzivně aplikuje stejná operace.
Ukázka algoritmu quick sort