Jedná se o rychlý rekurzivní algoritmus pro řazení, založený na slévání seřazených podposloupností.
Posloupnost o jednom prvku je už seřazená.
Mějme vstupní neseřazenou posloupnost $n$ prvků pro $n \ge 2$. Rozdělíme ji na dvě části poloviční délky (řekněme prvních $\lfloor n/2 \rfloor$ a zbývajících $\lceil n/2 \rceil$ prvků).
Rekurzivním voláním téhož algoritmu na obě poloviny je seřadíme.
Obě seřazené poloviny posléze slijeme dohromady do jedné seřazené posloupnosti a máme výsledek
Algoritmus 10.2: MergeSort
Algoritmus 10.3: Merge
Operace Merge
pouze přesouvá prvky a každý prvek přesune právě jednou.
Její časová složitost je tedy $\Theta (n+m)$, kde $n, m$ jsou délky slévaných polí.
Vyžaduje pomocnou paměť ve formě pomocného pole velikosti $\Theta (n + m)$
MergeSort
)
$\Theta (n \log n)$
Rozdělení posloupnosti a slití seřazených kusů trvá čas $cn$.
Algoritmus volá $2×$ sebe sama na vstupy velikosti $n/2$. Proto
Po rozvinutí dostaneme:
Rekurze skončí, když $n/2^k = 1$ čili $k = \log n$.
Tím dostaneme $T(n) = 2^{\log n} \cdot T(1) + \log n \cdot cn = Θ(n) + cn \log n = Θ(n \log n)$.
$\square$
MergeSort
)
$\Theta (n)$
MergeSort
si pamatuje lokální proměnné: vstup a jejich
setříděné poloviny, dohromady $\Theta(n)$ paměti. Plus kontext pro
návrat z rekurzivního zanoření ($O(1)$ paměti).
Mimo to obě rekurzivní volání spotřebují další paměť, ale jelikož vždy běží pouze jedno z nich, stačí započítat pouze jedno.
Dostaneme tuto rekurentní rovnici (pro kladnou konstantu d):
To nám pro $M(n)$ dává geometrickou řadu $dn + dn/2 + dn/4 + ...$, která má součet $\Theta(n)$
$\square$