80 likes | 233 Views
Algoritmy řazení. Přímé zatřiďování. Vstup: posloupnost a1, a2,..., an Výstup: seřazená posloupnost b1, b2,..., bn Polož počítadlo:=1 Dokud není počítadlo = n+1 dělej Najdi nejmenší prvek v posloupnosti a1, a2,..., an, označ ho ai Vlož ai na pozici b počítadlo
E N D
Přímé zatřiďování Vstup: posloupnost a1, a2,..., an • Výstup: seřazená posloupnost b1, b2,..., bn • Polož počítadlo:=1 • Dokud není počítadlo = n+1 dělej • Najdi nejmenší prvek v posloupnosti a1, a2,..., an, označ ho ai • Vlož ai na pozici bpočítadlo • Vyřaď ai z posloupnosti a1, a2,..., an • Zvětši počítadlo o 1
Složitost přímého zatřiďování • n x n cyklů • Složitost je Θ(n2)
Bublinkové řazení (bubblesort) Vstup: posloupnost a1, a2,..., an • Výstup: seřazená posloupnost b1, b2,..., bn • Opakuj dokud dochází ke změnám • Pro i = 1 až n-1 opakuj • Pokud je ai větší než ai+1 prohoď tyto dva prvky VARIANTA Vstup: posloupnost a1, a2,..., an • Výstup: seřazená posloupnost b1, b2,..., bn • Vlož n-1 do KONEC_PROHLEDAVANI • Opakuj dokud dochází ke změnám • Pro i = 1 až KONEC_PROHLEDAVANI-1 opakuj • Pokud je ai větší než ai+1 prohoď tyto dva prvky • Zmenši KONEC_PROHLEDAVANI o 1
Složitost Bublinkového řazení • V prvním cyklu n-1 průchodů, v dalším n-2, atd. • Celkem n . (n-1) / 2 cyklů • Složitost je Θ(n2)
Řazení sléváním (mergesort) Vstup: posloupnost a1, a2,..., an • Výstup: seřazená posloupnost b1, b2,..., bn • Posloupnost a1,a2,...,an rozděl na posloupnost l1,...,lm =a1,...,am • a p1,..., pk = am+1, ..., an, kde m je horní celá část z n / 2 • Pokud m > 1 seřaď l1,...,lm algoritmem mergesort • Pokud k > 1 seřaď p1,...,pk algoritmem mergesort • Vlož 1 do proměnných i a j • Dokud je i menší nebo rovno než m a j menší nebo rovno než k opakuj • Pokud je li menší než pj • Do posloupnosti b vlož li • Zvětši i o 1 • Jinak • Do posloupnosti b vlož pj • Zvětši j o 1 • Pokud je i větší než m • Doplň posloupnost b zbytkem posloupnosti p • Jinak • Doplň posloupnost b zbytkem posloupnosti l
Složitost mergesortu • ln2n cyklů o n porovnáních • Složitost je Θ(n.ln n) • Nezáleží na základě logaritmu
Porovnání složitostí 10 100 23,02585 0,0001 2,30259E-05 20 400 59,91465 0,0004 5,99146E-05 50 2500 195,6012 0,0025 0,000195601 100 10000 460,517 0,01 0,000460517 1000 1000000 6907,755 1 0,006907755 10000 1E+08 92103,4 1 min 40 s 0,092103404 1000000 1E+12 13815511 11,5 dne 13,81551056 10000000 1E+14 1,61E+08 3 000 000 let 2 min 40 s