Counting Sort
- Algoritmus třídění, který využívá jinou informaci než porovnávání
- Lze použít pouze pro třídění celých čísel
- Idea:
- - pole vstupní
- - pole výstupní
- - pole pomocné
- Složitost algoritmu v nejhorším případě:
- stabilní algoritmus počítání
Counting-Sort(A, B, k)
for i <- 0 to k
do C[i] <- 0
for j <- 0 to n-1
do C[A[j]] <- C[A[j]]+1 // C[i] obsahuje počet prvků v A rovných i
for i <- 1 to k
do C[i] <- C[i] + C[i-1] // C[i] obsahuje počet prvků v A <= i
for j <- n-1 downto 0
do B[C[A[j]]-1] <- A[j]
C[A[j]] <- C[A[j]]-1
Výpočet složitosti v nejhorším případě
- řádek instrukcí.
- řádek instrukcí.
- řádek instrukcí.
- řádek instrukcí.
- Tedy složitost Counting Sort je v nejhorším případě .
- Je-li (tedy pro ), je poté složitost v nejhorším případě
Příklad
Radix Sort
- Používali operátoři mechanických třídiček děrných štítků
- Idea:
- Třídíme -místná čísla.
- Třídění proběhne v průchodech.
- V průchodu se čísla setřídí podle jejich poslední číslice,
- v podle předposlední,
- …
- Lze jej využít i na třídění textových řetězců, data ve tvaru rok-měsíc-den, …
- Složitost algoritmu v nejhorším případě:
Radix-Sort(A, d)
for i <- 1 to d
do Stable-Sort(A, i)
Příklad
Výpočet složitosti v nejhorším případě
- řádek : instrukcí
- řádek instrukcí
Bucket Sort
- Třídí čísla z intervalu
- Idea:
- Projdeme prvky pole a každý z nich vložíme do příslušného intervalu (do příslušného seznamu ).
- Každý seznam setřídíme.
- Prvky setříděných seznamů vložíme po řadě do výstupního pole
- Složitost algoritmu v nejhorším případě je:
- Složitost v průměrném případě je
Bucket-Sort(A[0 ... n-1])
for i <- 0 to n-1
do vlož A[i] do seznamu B[floor(n*A[i])]
for i <- 0 to n-1
do Sort(B[i])
vlož postupně prvky z B[0], ..., B[n-1] do pole A
Příklad
Výpočet složitosti v nejhorším případě
- To je případ, když všechny prvky z byly umístěny do jednoho seznamu
- Složitost bucket Sortu tedy je:
Navigace
Předchozí: Heap sort a jeho složitost Následující: Pořádkové statistiky Celý okruh: 1. Teoretické základy informačních technologií