Az összefésülő rendezés nagy elemszámú sorozatokat is viszonylag gyorsan rendez.
Az összefésülő rendezés az oszd-meg-és-uralkodj elvén alapuló rendezés,
azaz a
feladatot több kisebb részfeladatra bontja, amelyek hasonlóak az eredetihez és rekurzív módon oldják
meg a részfeladatokat, amelyeket összevonva adódik a feladat megoldása. Minden algoritmus, amely
ezen az elven alapul 3 lépésből áll. Felosztja a feladatot több kisebb részfeladatra,
"uralkodik" a részfeladatokon való megoldásukkal és összevonja a részfeladatokat, hogy
megkapja az eredeti feladat megoldását.
A rendezendő számokat kulcsoknak is szokás nevezni. Az összefésülő rendezés
stabil, azaz megőrzi az azonos kulcsú elemek sorrendjét. A stabilitását az biztosítja, hogy a
már rendezett résztömbök összefésülésekor, egyenlő kulcsok esetén a bal oldali résztömbből származó
kulcsot tesszük először a helyére.
Az összefésülő rendezés nem helyben rendező algoritmus, mivel az
összefésülés
($merge(A, B, C)$) segédtömböt használ.
Ez a rendezés az összehasonlító rendezések közé tartozik, azaz az elemek
sorrendjét azok összehasonlításával állapítja meg.
Aszimptotikusan optimális összehasonlító rendezés, ugyanis a
műveletigényének
felső korlátja megegyezik az alsó korláttal, ($O (n \cdot log \space n)$, $\Omega (n \cdot log \space
n)$).
Működése:
A tömböt mindig kettévágjuk a felénél, ha páratlan hosszú a tömb, akkor
$\frac{n}{2} - 1$ helyen, egészen addig, amíg egy elemet nem kapunk. Ekkor leáll a rekurzió, mivel
minden 1 hosszúságú sorozat már eleve rendezve van. Ezeket a számokat növekvő sorrendben fésüljük
össze. Végül egy rendezett tömböt kapunk.
Összefésülés alatt azt értjük, hogy a két tömbből úgy képzünk egyet, hogy
elindulunk a két rendezett tömbön és megnézzük, hogy melyik elem kisebb és azt tesszük vissza a tömb
végére.
Műveletigény:
- $MT_{merge}(k) \in \Theta (k)$
- $mT_{merge}(k) \in \Theta (k)$
- $MT(n)_{MS} \in \Theta(n \cdot log \space n)$
- $mT(n)_{MS} \in \Theta(n \cdot log \space n)$
Gyakorlati alkalmazása:
A Python egy TimSort nevű rendező algoritmust használ, amely egy hibrid rendezés,
ugyanis ötvözi az összefésülő rendezést és a beszúró rendezést.
A C++ std::stable_sort-ja is többnyire összefésülő rendezést használ.