Merge Insertion


Merge Insertion

Merge Insertion ist ein rekursives, vergleichsorientiertes Sortierverfahren, das mit weniger Vergleichen als Mergesort auskommt.

Idee des Algorithmus

Der tatsächliche Aufbau des Algorithmus ist schwer zu verstehen. Deshalb soll an dieser Stelle die Idee von Merge Insertion kurz erläutert werden.

Mergesort benötigt immer die gleiche Anzahl Vergleiche abhängig von der Eingabelänge n, egal ob n eine Zweierpotenz ist oder nicht. Diese Tatsache macht sich Merge Insertion zu Nutze und schafft es deshalb, mit weniger Vergleichen als Mergesort auszukommen. Die Idee ist, die Eingabe bei der Rekursion nicht in möglichst gleichgroße Teillisten aufzuspalten, sondern immer die nächstgrößere Zweierpotenz zu bearbeiten. Dadurch benötigt Merge Insertion im Vergleich zur informationstheoretischen unteren Schranke S(n)\ge \lceil \log_2 n! \rceil nur eine sehr geringe Anzahl Vergleiche mehr, als theoretisch notwendig.

Algorithmus als Pseudocode

procedure MergeInsertion(S1,...,Sn):

 1. Sortiere die Eingabe S1,...,Sn mit je einem Vergleich in \lfloor n/2 \rfloor disjunkte Paare.
    Ergebnis: bi < ai mit i=1{,}...{,}\lfloor n/2 \rfloor
 2. Sortiere die größeren Elemente a_1{,}...{,}a_{\lfloor n/2 \rfloor} rekursiv mit MergeInsertion.
 3. Nenne das Ergebnis aus Schritt 2 die Hauptkette: b_1{<}a_1{<}a_2...{<}a_{\lfloor n/2 \rfloor}
    Füge nun die restlichen Elemente b_2{,}...{,}b_{\lceil n/2 \rceil} durch Binäres Einfügen in der Reihenfolge 
    b3,b2,b5,b4,b11,b10,b9,b8,b7,b6,... in die Hauptkette ein.

Literatur


Wikimedia Foundation.