Maturitní téma: Programovací jazyk JAVA Insert Sort (třídění vkládáním) Algoritmus: 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek z nesetříděné části. 3. Tento prvek postupně porovnáváme s prvky v setříděnné části a vložíme jej sem tak, aby tato část zůstala setříděná. 4. Je-li v nesetříděné části nějaký prvek pokračujeme krokem 2. Jinak algoritmus končí.
Příklad: 44
55
12
42
94
18
6
67
44
55
12
42
94
18
6
67
44
55
12
42
94
18
6
67
12
44
55
42
94
18
6
67
12
42
44
55
94
18
6
67
12
42
44
55
94
18
6
67
12
18
42
44
55
94
6
67
6
12
18
42
44
55
94
67
6
12
18
42
44
55
67
94
Binary Insert Sort (třídění binárním vyhledáváním) Algoritmus: 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek z nesetříděné části. 3. Prvek vložíme na do setříděné části tak, že pozici nalezneme pomocí binárního vyhledání. 4. Je-li v nesetříděné části nějaký prvek pokračujeme krokem 2. Jinak algoritmus končí.
Select Sort (třídění přímým výběrem) Algoritmus: 1. Najdeme nejmenší prvek v poli. 2. Zaměníme ho s prvkem na první pozici. Setříděná část teď obsahuje pouze tento jeden prvek. Zbytek pole je nesetříděná část. 3. V nesetříděné části najdeme nejmenší prvek a vyměníme jej s prvním prvkem v nesetříděné části. Tím se tento prvek dostane do setříděné části. 4. Je-li v nesetříděnné části více jak jeden prvek pokračujeme krokem 2. 5. Obsahuje-li nesetříděná část pouze jeden prvek algoritmus končí.
Příklad 44
55
12
42
94
18
6
67
6
55
12
42
94
18
44
67
6
12
55
42
94
18
44
67
6
12
18
42
94
55
44
67
6
12
18
42
94
55
44
67
6
12
18
42
44
55
94
67
6
12
18
42
44
55
94
67
6
12
18
42
44
55
67
94
Shell Sort (třídění vkládáním s ubývajícím krokem) Algoritmus: 1. Zvolíme krok 2. V i-tém kroku třídíme prvky ve vzdélenosti h_i, pro i = t, t-1,...,0; h_i+1 > h_i; h1 = 0; t >0
Příklad: 44
55
12
42
94
18
6
67
44
18
6
42
94
55
12
67
6
18
12
42
44
55
94
67
6
18
12
42
44
55
67
94
BubbleSort Algoritmus: 1. Posloupnost rozdělíme na setříděnou a nesetříděnou část. 2. Porovnáváme sousední prvky v nesetříděné části. Pokud nejsou ve správném pořadí, tak je prohodíme. 3. Opakujeme krok 2, dokud nesetříděnné část obsahuje více jak jeden prvek.
Příklad: 44
55
12
42
94
18
6
67
44
12
42
55
18
6
67
94
12
42
44
18
6
55
67
94
12
42
18
6
44
55
67
94
12
18
6
42
44
55
67
94
12
6
18
42
44
55
67
94
6
12
18
42
44
55
67
94
6
12
18
42
44
55
67
94
QuickSort Algoritmus: 1. Tříděné pole rozdělíme pokud možno na dvě stejné disjunktní části. Rozdělení realizujeme tak, že zvolíme prvek tříděného pole (pivota). 2. Prvky vlevo od pivota by měli být menší než pivot a prvky vpravo od pivota by měli být větší jak pivot. 3. Procházíme levou část než narazíme na prvek větší než pivot. 4. Procházíme pravou část než narazíme na prvek menší než pivot. 5. Tyto prvky prohodíme. Pokud takové prvky neexistují prohazujeme pivota. 6. Rekurzivně pak dotřídíme pravou část pole a levou část pole.
Příklad: 44
55
12
42
94
18
6
67
6
55
12
42
94
18
44
67
6
55
12
42
94
18
44
67
6
18
12
42
94
55
44
67
6
18
12
42
94
55
44
67
6
18
12
42
44
55
94
67
6
18
12
42
44
55
94
67
6
18
12
42
44
55
67
94
6
18
12
42
44
55
67
94
6
18
12
42
44
55
67
94
6
18
12
42
44
55
67
94
RadixSort Algoritmus: 1. Představíme so čísla ve dvojkové soustavě o stejném počtu bitů. 2. Zvolíme číslo 2b. 3. Procházíme pole zleva a hledáme prvek začínající jedničkovým bitem. (větší jak 2b) 4. Procházíme pole zprava a hledáme prvek začínající nulovým bitem.(menší jak 2b) 5. Prvky prohodíme. 6. Rekurzivně dotřídíme zbytek pole.
DobSort Jedná se o spojení ShellSortu a BubbleSortu.
PigeonholeSort (přihrádkové třídění) Algoritmus: 1. Zavedeme m prázdných přihrátek. 2. Procházíme posloupnost prvků zleva a prvek ai dáme do přihrátky ai 3. Zpojíme všechny přihrátky.
Pole Statické pole Statickým polem nazýváme pole, které v průběhu zpracování nemůže měnit počet prvků.
Dynamické pole Dynamickým polem nazýváme pole, které v průběhu zpracování může měnit počet prvků.
Setříděné pole Je pole, které i po vložení nového prvku zůstává setříděné
Zásobník U zásobníku máme přesně dán způsob vkládání a mazání prvků. U zásobníku je uplatněn princip LIFO (last-in, first-out) tzn. prvek, který vložíme jako poslední, bude jako první smazán(vyjmut). Operace vložení do zásobníku se nazývá Push, operace vyjmutí se nazývá Pop. Zásobník dále implementuje tyto metody Empty - zjistí, zda je zásobník prázdný, Top vrací prvek na vrcholu (poslední prvek), tento prvek ale nemaže. Pro implementaci Zásobníku používáme jeden ukazatel vrchol zásobníku (stack pointer) - ukazuje na aktuální (poslední) prvek v zásobníku.
Fronta Fronta je další strukturou s přesně daným způsobem vkládání a mazání prvků. U fronty je uplatněn princip FIFO (first-in, first-out) tzn. prvek, který vložíme jako první, bude jako první smazán(vyjmut). Operace vložení do fronty se nazývá Put, operace odebrání se nazývá Get. Fronta dále implementuje tyto metody Empty - zjistí, zda je fronta prázdná. Pro implementaci fronty používáme dvou ukazatelů hlavu fronty (head) - ukazuje na prvek, který je na řadě pro odebrání. Ocas fonty (tail) - ukazuje na poslední prvek ve frontě.
MergeSort Tento algoritmus aplikuje postup "rozděluj a panuj"
Algoritmus 1. Rozdělíme pole na dvě stejné části A a B. 2. Části A a B seřadíme. 3. Tyto seřazené části spojíme následujícím způsobem: o je-li prvek a z A menší nebo roven prvku b z B pak do výsledné množiny zapíšeme prvek a z A o jinak zapíšeme do výsledné množiny prvek b z B o obsahují-li množiny A a B nějaké prvky provádíme stále předchozí dva kroky
Příklad