Řadicí algoritmus: Porovnání verzí

Smazaný obsah Přidaný obsah
Třídicí versus řadicí algoritmus - doplnění zdrojů, více viz Třídění
Řádek 1:
'''Třídicí algoritmus'''<ref name="Kristoufek_Encyklopedie">{{Citace monografie
'''Řadicí algoritmus''' (též nepřesně '''třídicí algoritmus''')<ref>http://ksp.mff.cuni.cz/tasks/16/cook2.html</ref> je [[algoritmus]] zajišťující seřazení daného souboru dat do specifikovaného pořadí. Nejčastěji se řadí podle numerické velikosti čísel, případně [[abecední řazení|abecedně]]. Řazení je velmi častá úloha, která je také částí mnoha dalších algoritmů; vývoji co možná nejefektivnějších algoritmů řazení se proto věnuje velké úsilí.
| příjmení = Krištoufek
| jméno = Karel
| odkaz na autora =
| titul = Výpočetní a řídicí technika
| datum vydání = 1982-01-01
| datum aktualizace =
| datum přístupu = 2012-12-27
| edice = Oborové encyklopedie SNTL
| vydavatel = SNTL
| místo = Praha
| rok = 1982
| jazyk = český
| počet stran = 372
| strany = 309
}}</ref><ref name="Kucera_Kombinatoricke_algoritmy">{{Citace monografie
| příjmení = Kučera
| jméno = Luděk
| odkaz na autora =
| titul = Kombinatorické algoritmy
| datum vydání = 1989
| vydání = 2
| datum aktualizace =
| edice = Matematický seminář SNTL
| vydavatel = SNTL
| místo = Praha
| rok = 1989
| jazyk = český
| počet stran = 287
| strany = 89-103
}}</ref><ref name="AC_slovnik_VT">{{Citace monografie
| příjmení = Minihofer
| jméno = Oldřich
| příjmení2 = Kratochvílová
| jméno2 = Jindra
| odkaz na autora =
| titul = Anglicko-český slovník výpočetní techniky
| datum vydání = 1986
| vydání = 1
| vydavatel = SNTL
| místo = Praha
| rok = 1986
| jazyk = český
| počet stran = 287
| strany = 494
}}</ref><ref name="Topfer_Algoritmy">{{Citace monografie
| příjmení = Töpfer
| jméno = Pavel
| titul = Algoritmy a programovací techniky
| datum vydání = 1995
| vydání = 1
| vydavatel = Prometheus, s.r.o.
| místo = Praha
| rok = 1995
| jazyk = český
| počet stran = 299
| strany = 190 (178-213)
}}</ref><ref>{{Citace elektronické monografie | titul = Recepty z programátorské kuchařky – Třídění | url = http://ksp.mff.cuni.cz/tasks/16/cook2.html | datum = 2011 | jméno1 = Tomáš | příjmení1 = Valla | jméno2 = Martin | příjmení2 = Mareš | jméno3 = Dan | příjmení3 = Kráľ}}</ref> (podle některých autorů '''řadicí algoritmus'''<ref name="Satrapa_Perl">{{Citace monografie
| příjmení = Satrapa
| jméno = Pavel
| titul = Perl pro zelenáče
| datum vydání = 1995
| vydání = 1
| vydavatel = Neokortex, spol. s r.o.
| místo = Praha
| rok = 2000
| jazyk = český
| počet stran = 224
| strany = 66
'''Řadicí algoritmus''' (též nepřesně '''třídicí algoritmus''')<ref>http://ksp.mff.cuni.cz/tasks/16/cook2.html}}</ref>) je [[algoritmus]] zajišťující seřazeníuspořádání danéhodané souborusady dat([[Pole (datová struktura)|pole]], [[Lineární seznam|seznamu]], [[soubor]]u) [[Záznam (informatika)|datových záznamů]] do specifikovanéhopožadovaného pořadí. Nejčastěji se řadí podle numerické velikostihodnoty čísel, případně [[abecední řazení|abecedně]]. Řazení je velmi častá úloha, která je také částí mnoha dalších algoritmů; vývoji co možná nejefektivnějších algoritmů řazení se proto věnuje velké úsilí.
 
Z hlediska řazení se vstupní data chápou jako soubor dvojic klíč–hodnota, přičemž po seřazení je posloupnost klíčů [[monotonicita|monotónní]], zatímco na připojené hodnoty se při řazení nebere zřetel a pouze se přesouvají vždy s odpovídajícím klíčem. Při existenci několika položek se stejným klíčem se však podle pořadí odpovídajících hodnot rozlišují [[stabilní řazení|stabilní]] a nestabilní algoritmy.
Řádek 12 ⟶ 81:
 
== Název ==
{{Podrobně|Třídění}}
Kromě o něco přesnějšího označení úlohy jako ''řazení'' se velmi často používá také název ''třídění'', což je nepřesné. ''Třídění'' v užším smyslu označuje jednodušší úlohu spočívající v rozdělení vstupní množiny do několika skupin podle zadaného kritéria, bez potřeby určení jejich vzájemného pořadí. Některé řadicí algoritmy však pracují na principu třídění.
Pro uspořádávání prvků do posloupnosti byl v informatice zaveden český termín '''třídění''', který byl také definován v (již zrušené) názvoslovné normě ČSN&nbsp;36&nbsp;9001. Mnoho autorů se domnívá, že pro tuto činnost by byl vhodnější termín '''řazení''', přičemž '''třídění''' by se mělo používat pro rozdělování sady záznamů do několika skupin podle zadaného kritéria, bez potřeby určení jejich vzájemného pořadí. Pouze někteří autoři však pro uspořádávání prvků do posloupnosti název '''řazení''' skutečně používají. Pro rozdělování záznamů do skupin lze používat jednoznačnější název '''klasifikace'''.
 
Některé algoritmy uspořádávání záznamů do posloupnosti využívají při své práci jejich rozdělování do několika skupin.
 
== Složitost ==
Řádek 24 ⟶ 96:
Kromě samotných řazených dat také algoritmus zpravidla potřebuje nějakou dodatečnou pracovní paměť. Pokud je velikost této paměti konstantní (nezávislá na množství řazených dat, označováno jako <math>O(1)</math>), algoritmus se označuje jako řazení na původním místě (''in situ'' nebo ''[[in-place algoritmus]]''), jiné algoritmy však potřebují dodatečnou paměť, například místo o velikosti původních dat (tedy <math>O(N)</math> v asymptotickém vyjádření), ve kterém generují seřazený výsledek.
 
Vstupní data mohou obsahovat několik prvků se shodným klíčem. Podle vzájemné polohy těchto prvků před a po seřazení (kterou lze detekovat podle přidružených dat, která nejsou součástí klíče) se rozlišují tzv. ''stabilní'' a ''nestabilní'' řadicítřídicí algoritmy: stabilní algoritmus zachovává vzájemné pořadí položek se stejným klíčem, u nestabilního není vzájemné pořadí prvků se stejným klíčem zaručeno. (Ale z libovolného nestabilního algoritmu lze učinit stabilní tím, že se klíč každé položky vstupních dat rozšíří o pozici položky v původním souboru.)
 
Podle chování na částečně seřazených souborech dat se rozlišují algoritmy ''přirozené'' a ''nepřirozené'': přirozený algoritmus rychleji zpracuje seřazenou množinu než neseřazenou.
Řádek 57 ⟶ 129:
: Vstupní soubor se rozdělí na části, které se (typicky [[rekurze|rekurzivně]]) seřadí; výsledné seřazené části se poté sloučí takovým způsobem, aby i výsledek byl seřazený.
 
Neexistuje žádný „dokonalý“ řadicítřídicí algoritmus, který by byl ideální pro všechna použití. Různé algoritmy mají různé vlastnosti co se týká jejich očekávané časové a paměťové složitosti, náročnosti implementace a dalších vlastností. Pro konkrétní podmínky se tak často navrhují specifické varianty.
 
=== Běžné algoritmy ===