ALG 09 Radix sort (přihrádkové řazení) Counting sort

Slides:



Advertisements
Podobné prezentace
Pro začátek něco lehčího
Advertisements

Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Programovací jazyk C++
Přednáška 11 Jiří Šebesta
Vnitřní řazení v poli (in sito)
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
10. Dynamické datové struktury
Spojové struktury Spojová struktura ( linked structure ):
ALGO – Algoritmizace 6. cvičení
VISUAL BASIC Práce se soubory.
Algoritmy a datové struktury
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
1/12 ALGO – Algoritmizace 5. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.
Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.
Algoritmy I Cvičení č. 4.
Algoritmy I Cvičení č. 3.
Programování v Pascalu Přednáška 7
Medians and Order Statistics Nechť A je množina obsahující n různých prvků: Definice: Statistika i-tého řádu je i-tý nejmenší prvek, tj., minimum = statistika.
Metody řazení s lineární časovou složitostí
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
Základy Visual Basicu.
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
Řadicí algoritmy autor: Tadeáš Berkman.
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
PB161 – Programování v jazyce C++ Objektově Orientované Programování
Algoritmy a programovací techniky
Algoritmy vyhledávání a řazení
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Časová složitost algoritmů
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
JavaScript Podmínky, cykly a pole.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Datové typy a struktury
Sorty Bubble, Insert a Quick
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
1 / 2X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
KIV/PPA1 cvičení 9 Cvičící: Pavel Bžoch. Osnova cvičení Třída String a její metody –Řetězce a operace s nimi.
ALGO – Algoritmizace 4. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
Typy cyklů Do...Loop For...Next For Each...Next.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
4. Typ pole 4.1 Jednorozměrná pole
1 / 3The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)),
VISUAL BASIC PRALG.
Algoritmizace a programování Pole – Příklady 3. Třídění polí V poli máme prvky a chceme je setřídit: V poli máme prvky a chceme je setřídit: od nejmenšího.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
ZAL – 6. cvičení 2016.
Úvod do programování 6. hodina
Vzorové řešení zápočtového testu
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Programování 2. hodina RNDr. Jan Lánský, Ph.D.
Výukový materiál zpracován v rámci projektu
Řazení INSERT SORT Tak co budu ŘADIT ?.
Oblast platnosti identifikátoru (1)
ALG 07 Selection sort (Select sort) Insertion sort (Insert sort)
Různé algoritmy mají různou složitost
ALG 08 Merge sort -- řazení sléváním
C# přehled vlastností.
Algoritmizace a datové struktury (14ASD)
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
Dynamické programování Optimální binární vyhledávací strom
Hledání k-tého nejmenšího prvku
Transkript prezentace:

ALG 09 Radix sort (přihrádkové řazení) Counting sort A4B33ALG 2011 / 09 ALG 09 Radix sort (přihrádkové řazení) Counting sort Přehled asymptotických rychlostí jednotlivých řazení Ilustrační experiment řazení 1

Radix sort Řaď podle 3. znaku Cbb DaD _ _ a B _ _ b _ _ C _ _ D aDb A4B33ALG 2011 / 09 Radix sort Neseřazeno Řaď podle 3. znaku 1 Cbb 2 DaD _ _ a B _ _ b _ _ C _ _ D 3 aDb 4 DCa 4 DCa 1 1 Cbb 3 5 CCC 8 2 DaD 11 5 CCC 12 Cba 2 3 aDb 4 8 aDC 9 6 aDD 12 6 aDD 7 DDb 5 9 bbC 10 11 DbD 13 7 DDb 10 bab 6 8 aDC 13 aCb 7 9 bbC 10 bab 11 DbD 12 Cba 13 aCb Staré pořadí 1 Nové pořadí 1 2

Radix sort Řaď podle 2. znaku DCa Cba _ a _ B _ b _ _ C _ _ D_ Cbb aDb A4B33ALG 2011 / 09 Radix sort Seřazeno od 3. znaku Řaď podle 2. znaku 1 DCa 2 Cba _ a _ B _ b _ _ C _ _ D_ 3 Cbb 4 aDb 6 bab 1 2 Cba 3 1 DCa 7 4 aDb 10 5 DDb 11 DaD 2 3 Cbb 4 7 aCb 8 5 DDb 11 6 bab 10 bbC 5 8 CCC 9 9 aDC 12 7 aCb 13 DbD 6 12 aDD 13 8 CCC 9 aDC 10 bbC 11 DaD 12 aDD 13 DbD 3

Radix sort Řaď podle 1. znaku bab DaD a _ _ B b _ _ C _ _ D_ _ Cba Cbb A4B33ALG 2011 / 09 Radix sort Seřazeno od 2. znaku Řaď podle 1. znaku 1 bab 2 DaD a _ _ B b _ _ C _ _ D_ _ 3 Cba 4 Cbb 8 aCb 1 1 bab 5 3 Cba 7 2 DaD 10 5 bbC 10 aDb 2 5 bbC 6 4 Cbb 8 6 DbD 11 6 DbD 12 aDC 3 9 CCC 9 7 DCa 12 7 DCa 13 aDD 4 11 DDb 13 8 aCb 9 CCC 10 aDb 11 DDb 12 aDC Seřazeno! 13 aDD 4

Implementace radix sortu registrují nové pořadí. A4B33ALG 2011 / 09 Implementace radix sortu Pomocná pole indexů registrují nové pořadí. Neseřazeno Seřazeno dle 3. znaku 1 Cbb _ _ a B zač. & konec další 2 DaD 4 DCa 1 _ _ C 3 aDb 12 Cba 2 1 3 3 a 4 12 4 DCa 5 CCC 8 2 6 b 1 13 5 CCC 8 aDC 9 3 7 C 5 9 4 12 6 aDD _ _ b 9 bbC 10 5 8 D 2 11 7 DDb 1 Cbb 3 6 11 8 aDC _ _ D 7 10 3 aDb 4 9 bbC 8 9 7 DDb 5 2 DaD 11 9 10 bab 10 bab 6 10 13 6 aDD 12 11 DbD 13 aCb 7 11 11 DbD 13 12 Cba 12 13 aCb Příklad Příklad 13 5

Implementace radix sortu A4B33ALG 2011 / 09 Implementace radix sortu Neseřazeno Jedno pole pro všechny seznamy Aktuálně obě pole přesně registrují stav po seřazení podle 3. znaku. Pole ukazatelů na začátek a konec seznamu pro každý znak 1 Cbb 3 z k 2 DaD 6 a 4 12 3 aDb b 1 13 7 C 5 9 4 DCa 12 D 2 11 5 CCC 8 6 aDD Radix sort lze provést bez přesouvání původních dat, pouze manipulací s uvedenými celočíselnými poli, která obsahují veškerou informaci o aktuálním stavu řazení. 11 7 DDb Ukázka seznamu pro 'b' 10 8 aDC 9 9 bbC 10 bab 13 11 DbD 12 Cba 13 aCb 6

Implementace radix sortu A4B33ALG 2011 / 09 Implementace radix sortu Neseřazeno Stav po seřazení podle 2. znaku. Stav po seřazení podle 1. znaku = seřazeno. 1 Cbb 9 z k 5 z k 2 DaD a 10 2 11 a 13 6 3 aDb b 12 11 b 10 9 7 8 C 4 5 C 12 5 4 DCa 13 7 D 3 6 D 2 7 5 CCC 6 aDD 7 DDb 8 8 aDC 6 Ukázka seznamů pro 'b' 6 9 bbC 11 10 bab 2 9 11 DbD 4 12 Cba 1 1 13 aCb 5 3 7

Implementace radix sortu A4B33ALG 2011 / 09 Implementace radix sortu Stačí vypsat data v pořadí daném seznamy: a b C D Stav po seřazení podle 1. znaku = seřazeno. Neseřazeno 1 Cbb z k 5 13 aCb 2 DaD 11 13 6 10 9 12 5 2 7 a b C D 3 aDb 3 aDb 8 8 aDC 4 DCa 7 6 aDD 5 CCC 10 bab 6 aDD 9 bbC 7 DDb 12 Cba 8 aDC 6 1 Cbb 9 bbC 5 CCC 10 bab 9 2 DaD 11 DbD 4 11 DbD 12 Cba 1 4 DCa 13 aCb 3 7 DDb 8

Od seřazení podle 2. znaku k seřazení podle 1. znaku A4B33ALG 2011 / 09 Od seřazení podle 2. znaku k seřazení podle 1. znaku Pole obsahují uspořádání podle 2. znaku. z k z1 k1 Pole budou obsahovat uspořádání podle 1. znaku a 10 2 a b 12 11 b C 4 5 C D 3 6 D 1 Cbb 9 4 2 DaD 2 Aktualizace polí z, k, d proběhne tak, že naplníme nová pole z1, k1, d1, která nakonec zkopírujeme zpět do z, k, d. 3 aDb 7 10 4 DCa 13 7 5 CCC 9 6 aDD 13 7 DDb 8 11 Implementačně ovšem není třeba cokoli kopírovat, stačí záměna referencí (ukazatelů, pointerů) na tato pole. 8 aDC 6 12 9 bbC 11 5 10 bab 2 1 11 DbD 6 12 Cba 1 3 13 aCb 5 8 d d1 9

Od seřazení podle 2. znaku k seřazení podle 1. znaku A4B33ALG 2011 / 09 Od seřazení podle 2. znaku k seřazení podle 1. znaku z k z1 k1 z1 k1 z1 k1 z1 k1 z1 k1 z1 k1 z1 k1 Usp. dle 2. zn. a 10 2 a b 12 11 b 10 10 10 10 10 10 10 10 10 9 10 9 C 4 5 C 12 12 12 1 12 1 12 1 D 3 6 D 2 2 2 2 2 2 2 2 2 11 1 Cbb 9 4 2 DaD 2 11 3 aDb 7 10 4 DCa 13 7 5 CCC 9 6 aDD 13 7 DDb 8 11 8 aDC 6 12 9 bbC 11 5 10 bab 2 1 9 9 11 DbD 6 12 Cba 1 3 1 1 1 13 aCb 5 8 d d1 d1 d1 d1 d1 d1 d1 10

Od seřazení podle 2. znaku k seřazení podle 1. znaku A4B33ALG 2011 / 09 Od seřazení podle 2. znaku k seřazení podle 1. znaku z k z1 k1 z1 k1 z1 k1 z1 k1 z1 k1 z1 k1 z1 k1 Usp. dle 2. zn. a 10 2 a 13 13 13 13 13 3 13 3 13 8 13 6 b 12 11 b 10 9 10 9 10 9 10 9 10 9 10 9 10 9 C 4 5 C 12 1 12 1 12 5 12 5 12 5 12 5 12 5 D 3 6 D 2 4 2 4 2 4 2 4 2 7 2 7 2 7 1 Cbb 9 4 5 5 5 5 5 2 DaD 2 11 11 11 11 11 11 11 3 aDb 7 10 8 8 4 DCa 13 7 7 7 7 Hotovo 5 CCC 9 6 aDD 13 7 DDb 8 11 8 aDC 6 12 6 9 bbC 11 5 10 bab 2 1 9 9 9 9 9 9 9 11 DbD 6 4 4 4 4 4 4 4 12 Cba 1 3 1 1 1 1 1 1 1 13 aCb 5 8 3 3 3 3 d d1 d1 d1 d1 d1 d1 d1 11

Implementace radix sortu A4B33ALG 2011 / 09 Implementace radix sortu void radix_sort( String [] a ) { int charCount = ...; // number of chars used (2^16?) int [] z = new int [charCount]; int [] k = new int [charCount]; int [] z1 = new int [charCount]; int [] k1 = new int [charCount]; int [] d = new int [a.length]; int [] d1 = new int [a.length]; int [] aux; initStep( a, z, k, d ); // 1st pass with last char for( int p = a[0].length()-2; p >= 0; p-- ) { radixStep( a, p, z, k, d, z1, k1, d1 ); // do the job aux = z; z = z1; z1 = aux; // just swap arrays aux = k; k = k1; k1 = aux; // dtto aux = d; d = d1; d1 = aux; // dtto } output( a, z, k, d ); // print sorted array 12

Implementace radix sortu A4B33ALG 2011 / 09 Implementace radix sortu void initStep( String[] a, int [] z, int [] k, int [] d ){ int pos = a[0].length()-1; // last char in string int c; // char as array index for Radix sort for( int i = 0; i < z.length; i++ ) // init arrays z[i] = k[i] = -1; // empty for( int i = 0; i < a.length; i++ ){ // all last chars c = (int) a[i].charAt(pos); // char to index if( z[c] == -1 ) k[c]= z[c] = i; // start new list else { d[k[c]] = i; // extend existing list k[c] = i; } } } Řetězce různé délky nutno uvést na stejnou délku připojením "nevýznamných znaků", např. mezer. V ukázkovém kódu všechny indexy polí začínají 0, v obrázcích začínají 1. 13

Implementace radix sortu A4B33ALG 2011 / 09 Implementace radix sortu void radixStep( String [] a, int pos, int [] z, int [] k, int [] d, int [] z1, int [] k1, int [] d1 ){ int j; // index traverses old lists int c; // char as array index for Radix sort for( int i = 0; i < z.length; i++ ) // init arrays z1[i] = k1[i] = -1; // for( int i = 0; i < z.length; i++ ) // for all used chars if (z[i] != -1) { // unempty list j = z[i]; while( true ){ // scan the list c = (int) a[j].charAt(pos); // char to index if( z1[c] == -1 ) k1[c]= z1[c] = j; // start new list else { d1[k1[c]] = j; // extend existing list k1[c] = j; } if( j == k[i] ) break; j = d[j]; // next string index } } } 14

Radix sort nemění pořadí stejných hodnot A4B33ALG 2011 / 09 Radix sort Shrnutí d znaků ............ d cyklů (n) operací cyklus ............ (d·n) operací celkem ............ d << n  ..…. (n) operací Radix sort nemění pořadí stejných hodnot Asymptotická složitost Radix sortu je (n*d) Pro malé konstantní d lze psát (n) Je to stabilní řazení 15

k = max(vstup) - min(vstup) + 1 A4B33ALG 2011 / 09 Counting sort 1 2 3 4 5 6 7 8 9 10 11 12 vstup vstup.length == N 10 3 8 8 6 3 8 10 6 10 8 5 cetnost cetnost.length == k 3 4 5 6 7 8 9 10 2 1 2 4 3 k = max(vstup) - min(vstup) + 1 1 2 3 4 5 6 7 8 9 10 11 12 vystup vstup.length == N 3 3 5 6 6 8 8 8 8 10 10 10 16

A4B33ALG 2011 / 09 Counting sort Vynulování pole četností Krok 1 3 4 5 6 7 8 9 10 Jeden průchod vstupním polem 10 3 8 8 6 3 8 10 6 10 8 5 Naplnění pole četností 3 4 5 6 7 8 9 10 2 1 2 4 3 17

cetnost[i] += cetnost[i-1] A4B33ALG 2011 / 09 Counting sort Krok 2 jeden průchod Pole četností mění svou roli 3 4 5 6 7 8 9 10 2 1 2 4 3 Úprava pole četností for( int i = dMez+1; i <= hMez; i++ ) cetnost[i] += cetnost[i-1] Prvek cetnost[ j ] obsahuje pozici posledního prvku s hodnotou j v budoucím výstupním poli. 3 4 5 6 7 8 9 10 2 12 1 2 3 4 5 6 7 8 9 10 11 12 3 3 5 6 6 8 8 8 8 10 10 10 18

vystup[cetnost[vstup[i]]] = vstup[i]; cetnost[vstup[i]]--; } i == N A4B33ALG 2011 / 09 Counting sort Krok 3 for( int i = N; i > 0; i-- ) { vystup[cetnost[vstup[i]]] = vstup[i]; cetnost[vstup[i]]--; } i == N 1 2 3 4 5 6 7 8 9 10 11 12 i == 12 10 3 8 8 6 3 8 10 6 10 8 5 3 4 5 6 7 8 9 10 2 12 3 4 5 6 7 8 9 10 2 12 1 2 3 4 5 6 7 8 9 10 11 12 5 19

vystup[cetnost[vstup[i]]] = vstup[i]; cetnost[vstup[i]]--; } i == N-1 A4B33ALG 2011 / 09 Counting sort Krok 3 for( int i = N; i > 0; i-- ) { vystup[cetnost[vstup[i]]] = vstup[i]; cetnost[vstup[i]]--; } i == N-1 1 2 3 4 5 6 7 8 9 10 11 12 i == 11 10 3 8 8 6 3 8 10 6 10 8 5 3 4 5 6 7 8 9 10 2 12 3 4 5 6 7 8 9 10 2 12 1 2 3 4 5 6 7 8 9 10 11 12 5 8 20

atd... Counting sort vystup[cetnost[vstup[i]]] = vstup[i]; A4B33ALG 2011 / 09 Counting sort Krok 3 for( int i = N; i > 0; i-- ) { vystup[cetnost[vstup[i]]] = vstup[i]; cetnost[vstup[i]]--; } i == N-2 1 2 3 4 5 6 7 8 9 10 11 12 i == 10 10 3 8 8 6 3 8 10 6 10 8 5 3 4 5 6 7 8 9 10 2 12 3 4 5 6 7 8 9 10 2 11 1 2 3 4 5 6 7 8 9 10 11 12 5 8 10 atd... 21

atd... Counting sort vystup[cetnost[vstup[i]]] = vstup[i]; A4B33ALG 2011 / 09 Counting sort Krok 3 for( int i = N; i > 0; i-- ) { vystup[cetnost[vstup[i]]] = vstup[i]; cetnost[vstup[i]]--; } i == 3 1 2 3 4 5 6 7 8 9 10 11 12 i == 3 10 3 8 8 6 3 8 10 6 10 8 5 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 1 2 3 4 5 6 7 8 9 10 11 12 3 5 6 6 8 8 8 8 10 10 atd... 22

Orientační přehled vlastností řadících algoritmů A4B33ALG 2011 / 09 Orientační přehled vlastností řadících algoritmů Velikost pole n Nejhorší případ Nejlepší případ "typický", "běžný" případ Stabilní Všeobecné Selection sort (n2) (n2) (n2) Ne Ano Insertion sort (n2) (n) (n2) Ano Ano Bubble sort (n2) (n2) (n2) Ano Ano Quick sort (n2) (nlog(n)) (nlog(n)) Ne Ano Merge sort (nlog(n)) (nlog(n)) (nlog(n)) Ano Ano Heap sort (nlog(n)) O(nlog(n)) (nlog(n)) Ne Ano Radix sort (n) (n) (n) Ano Ne Counting sort (n) (n) (n) Ano Ne 23

Ilustrační experiment řazení A4B33ALG 2011 / 09 Ilustrační experiment řazení Prostředí Intel(R) 1.8 GHz, Microsoft Windows XP SP3, jdk 1.6.0_16. Organizace Použita řazení, v nichž se prvky (double) navzájem porovnávají. Kódy převzaty z přednášky (žádné další triky). Řazení v jednotlivých velikostech prováděna na stejných datech. Pole náhodně zamíchána generátorem pseudonáhodných čísel s rovnoměrným rozložením. Výsledky průměrovány přes větší počet běhů. Závěr Neexistuje jedno univerzální řazení, které by bylo optimální za všech okolností. Hraje roli stabilita, velikost dat i stupeň předběžného seřazení dat. 24

Ilustrační experiment řazení A4B33ALG 2011 / 09 Ilustrační experiment řazení Délka pole % seř. Doba běhu v milisekundách, není-li uvedeno jinak Sort Select Insert Bubble Quick Merge Heap 10 0% 0.0005 0.0002 0.0005 0.0004 0.0009 0.0005 10 90% 0.0004 0.0001 0.0004 0.0004 0.0007 0.0005 100 0% 0.028 0.016 0.043 0.081 0.014 0.011 100 90% 0.026 0.003 0.030 0.010 0.011 0.011 1 000 0% 2.36 1.30 4.45 0.12 0.19 0.17 1 000 90% 2.31 0.18 2.86 0.16 0.15 0.16 10 000 0% 228 130 450 1.57 2.40 2.31 10 000 90% 229 17.5 285 1.93 1.68 2.11 100 000 0% 22 900 12 800 45 000 18.7 31.4 31.4 100 000 90% 22 900 1 760 28 500 27.4 24.6 25.5 1 000 000 0% 38 min 22 min 75 min 237 385 570 1 000 000 90% 38 min 2.9 min 47.5 min 336 301 381 Seřazená část pole. Pole je nejprve seřazeno, pak náhodně vybrané prvky změní libovolně hodnotu. 25

Ilustrační experiment řazení A4B33ALG 2011 / 09 Ilustrační experiment řazení Délka pole % seř. Koeficient zpomalení ( >1 ) vůči Quick sortu pro danou velikost dat a předběžné seřazení Sort Select Insert Bubble Quick Merge Heap 10 0% 1.3 0.7 1.4 1 2.5 1.4 10 90% 1 0.26 0.96 1 1.8 1.3 100 0% 3.4 1.8 5.4 1 1.75 1.35 100 90% 2.46 0.28 2.9 1 1.07 1.07 1 000 0% 20 11 37.5 1 1.65 1.4 1 000 90% 15 1.2 18.5 1 0.95 1.03 10 000 0% 146 83 287 1 1.53 1.48 10 000 90% 118 9.1 148 1 0.87 1.09 100 000 0% 1 220 686 2 410 1 1.7 1.7 100 000 90% 837 64.1 1 040 1 0.9 0.93 1 000 000 0% 9 960 5 400 19 000 1 1.6 2.41 1 000 000 90% 6 820 521 8 480 1 0.9 1.14 Nejrychlejší Nejpomalejší Stabilní Select a Bubble sorty nesoutěží. 26

Ilustrační experiment řazení A4B33ALG 2011 / 09 Ilustrační experiment řazení Délka pole % seř. Koeficient zpomalení ( > 1) při srovnání rychlosti řazení neseřazeného a částečně seřazeného pole Sort Select Insert Bubble Quick Merge Heap 10 0% 1 1 1 1 1 1 10 90% 0.8 0.5 0.8 1 0.8 1 100 0% 1 1 1 1 1 1 100 90% 0.9 0.2 0.68 1.27 0.78 1 1 000 0% 1 1 1 1 1 1 1 000 90% 0.98 0.14 0.64 1.31 0.75 0.95 10 000 0% 1 1 1 1 1 1 10 000 90% 1.0 0.14 0.63 1.23 0.7 0.91 100 000 0% 1 1 1 1 1 1 100 000 90% 1.0 0.14 0.63 1.46 0.78 0.81 1 000 000 0% 1 1 1 1 1 1 1 000 000 90% 1.0 0.14 0.63 1.42 0.78 0.67 Stabilní 27