Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Třídíme data
19. února 2002, 00.00 | Téměř v každém programu potřebujeme nějaká data setřídit
např. podle abecedy nebo podle číselné hodnoty. K tomu nám slouží třídící algoritmy.
V tomto článku si ukážeme jak na to.
Téměř v každém programu potřebujeme nějaká data setřídit např. podle abecedy nebo podle číselné hodnoty. K tomu nám slouží třídící algoritmy. V tomto článku bych vám chtěl ukázat, jak na to.
Na třídícím algoritmu může záležet rychlost celého výsledného programu. A právě proto musíme zvolit takový, který je dostatečně rychlý a stabilní. Samozřejmě je rozdíl řadit položek deset a stotisíc. V prvním případě si vystačíme s jakýmkoli algoritmem, protože výsledná doba bude zanedbatelná. Ale v druhém případě, pokud zvolíme pomalý třídící algoritmus, může doba přesáhnout i pár desítek minut.
Zde uvedu základní přehled nejznámějších třídících algoritmů:
- Bubble Sort
- Select Sort
- Insert Sort
- Binary Insert Sort
- Shell Sort
- Shaker Sort
- Heap Sort
- Radix Sort
- Merge Sort
- Quick Sort
Pro náš účel budeme řadit pole, protože je z hlediska řazení a jiných operací s daty zdaleka nejnázornější. Prvky tohoto pole budou čísla, které budeme řadit vzestupně. Tj. od nejmenší hodnoty po největší. Podotýkám, že řazení řetězců by fungovalo na zcela stejném principu.
Bubble Sort
Ze všech zde uvedeným metod je tato nejjednodušší, ale také nejpomalejší. Její metoda spočívá v postupném porovnávání sousedních prvků pole. V případě, že druhý z porovnávaných prvků je menší než první, provede se jejich záměna. Tímto způsobem se pokračuje do té doby, dokud nenarazíme na menší prvek nebo na začátek pole.
|
Existuje také vylepšená metoda, která ukončí činnost v okamžiku, kdy je již celá posloupnost uspořádaná. Tudíž algoritmus nemusí probíhat prvky pole zbytečně:
|
Na začátku jsem uvedl, že je tato metoda nejpomalejší. Ano, v případě, že pole je neseřazené. Ale pokud necháme algoritmem projít již seřazenou posloupnost, je tato metoda jedna z nejrychlejších ! Tohoto můžeme využít, pokud chceme např. zjistit, zda je pole již seřazené.
Select Sort
Tato metoda pracuje tak, že vyhledá nejmenší prvek v nesetřízené části a zařadí ho na konec již setřízené části. Tzn. že musíme projít celé pole, najít nejmenší prvek a zařadit ho na první místo. Poté znova musí projít pole od druhého prvku pole (protože první prvek má již svou konečnou pozici) a vyhledá opět nejmenší prvek. Ten zařadí na druhou pozici. Tato činnost se opakuje tak dlouho, dokud neprojde celou posloupnost a nesetřídí ji.
|
Jak vidíme, tak metoda je také značně jednoduchá, ale opět časově nevýhodná.
Insert Sort
Algoritmus Insert Sort pracuje tak, že vyhledává index, kam se má prvek zařadit a zároveň zbývající prvky posune o jednu pozici směrem ke konci pole. Nejdříve ovšem musíme na začátek pole přidat jeden prvek k třízené posloupnosti, který budeme používat jako pomocný.
|
Pozor! Nesmíme zapomenout, že algoritmus nám vrátí i první prvek pole, který je pomocný. I zde existuje drobná úprava, díky které metodu výrazně urychlíme. Tu si ovšem ukážeme až příště ...
Pro srovnání rychlosti metod jsem vytvořil program, který seřazuje pole a zobrazí výsledný čas v milisekundách. Po stisku tlačítka Generate se vygenerují náhodné hodnoty v rozsahu typu Integer. Samozřejmě, že by se toto mohlo vykonat při stisku tlačítka Start. Ale byl to úmysl. Takto je totiž možné si ukázat rychlost jednotlivých metod na již setřízeném poli.
V dalším díle si popíšeme některé z výše jmenovaných metod.
Zdrojové kódy dnes ukázaných metod naleznete zde - velikost 173 kB.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007