Zaradenie a popis
Mergesort alebo triedenie zlučovaním je triediaci algoritmus, ktorý triedi v čase O(n log n). Je stabilný, ale netriedi na mieste. Je to algoritmus využívajúci techniku divide and conquer. Charakteristickou vlastnosťou je zlučovanie už utriedených podpostupností (merging). Používa sa napríklad pri triedení online, kde sa postupne dodávajú položky, ktoré majú byť utriedené (namiesto prístupu k celému poľu).
^ TOPMotivácia a špecifikácia
Máme v poli uloženú postupnosť prvkov. Cieľom je usporiadať túto postupnosť vzostupne v priemernom čase O(n log n).
Taktiež je požiadavka, aby bol triediaci algoritmus stabilný.
Vstup: pole A, ktoré je naplnené náhodnými hodnotami
Výstup: utriedené pole A
Myšlienka algoritmu
Mergesort funguje principiálne v 3 krokoch:
1. Rozdelenie neutriedenej postupnosti na dve približne rovnaké časti.
2. Zoradenie každej časti zvlášť (rekurzívne rozdeľovanie každej časti, až po postupnosť dĺžky 1,
ktorá je samozrejme utriedená. Vtedy sa začína vynárať z rekurzie.
3. Zlúčenie oboch častí
Mergesort zlepšuje túto rutinu dvoma myšlienkami:
1. Na utriedenie malej postupnosti je potrebých menej krokov ako na utriedenie veľkej.
2. Je potrebných menej krokov na vytvorenie utriedenej postupnosti z dvoch utriedených podpostupností, ako z
dvoch neutriedených podpostupností. Napríklad je nutné prejsť každou podpostupnosťou len raz, pokiaľ sú už utriedené.
Vizualizácia
X-ová súradnica znázorňuje hodnotu prvku, Y-ová súradnica umiestnenie v poli.
Je vidieť, ako sa postupne vytvárajú utriedené podpostupnosti a tie sa zlučujú.
Autor: Nuno Nogueira, zdroj: www.wikipedia.org

Zápis algoritmu
function mergesort(m)
var list left, right
if length(m) <= 1
return m
else
middle = length(m) / 2
for each x in m up to middle
add x to left
for each x in m after middle
add x to right
left = mergesort(left)
right = mergesort(right)
result = merge(left, right)
return result
end if
^ TOP
Vlastnosti algoritmu
Asymptotická zložitosť pre priemerný aj najhorší prípad je O(nlog2(n)).
Velkou nevýhodou oproti algoritmom rovnakej asymptotickej rýchlosti (napríklad Heapsort) je, že Mergesort potrebuje pre svoju prácu
navyše pole veľkosti N. Existuje síce aj modifikácia Mergesortu, ktorá toto pole nepotrebuje, ale jej implementácia
je veľmi zložitá a pomalá. Okrem toho je Mergesort v rôznych porovnaniach pomalší ako Quicksort alebo Heapsort.
Mergesort je ale stabilný triediaci algoritmus, lepšie sa paralelizuje a má vyšší výkon na sekvenčných médiách
s nižšou prístupovou dobou, lebo vyžaduje len malé množstvo pamäte s priamym prístupom. V mnohých programovacích jazykoch je Mergesort
implicitným triediacim algoritmom (napríklad v Jave alebo v GNU C Library).
Experimentovanie
Department of Computer Science, University of British Columbia, Canada
Java applety rôznych triediacich algoritmov.
http://www.cs.ubc.ca/spider/harrison/Java/sorting-demo.html
Computer Science Department, Princeton University, USA
Mergesort spracovaný do java appletu.
http://www.cs.princeton.edu/~ah/alg_anim/version1/MergeSort.html