Site hosted by Angelfire.com: Build your free website today!

Insertion Sort


Das Sortieren durch direktes Einfügen funktioniert folgendermaßen:
Man betrachte der Reihe nach die Elemente  mit dem Index 2 bis N. Dabei überprüft man immer die, zwangsmäßig schon sortierten, Element links davon, ob sie größer sind, als das momentan betrachtete. Ist dies der Fall, so rutschen sie ein Platz nach rechts. Ist das nicht (mehr) der Fall, so wird rechts von diesem Element, das kleiner ist, als das betrachtete, in den, durch Rechtsverschiebung der anderen Elemente entstandenen Leerraum, das als Vergleichswert fungierende eingefügt.
Folge: alle Element links von ihm sind kleiner, als es selbst, aber nicht alle rechts von ihm müssen zwangsläufig größer sein.

Im durchschnittlichen Fall werden N²/4 Vergleiche und N²/8 Austauschoperationen durchgeführt. Im ungünstigsten Fall steigen diese Zahlen auf N²/2 Vergleiche und N²/4 Austauschoperationen.

Achtung: In feld[0] muß ein Wert gesetzt werden, der kleiner ist, als alle anderen im Feld, da sonst die while-Schleife über das linke Feldende laufen kann. Alternativ kann auch der Schleifenkopf auf while(j>1 && feld[j-1] > v) erweitert werden, was jedoch nicht empfehlenswert ist, da die Komplexität der inneren Schleife ansteigt, was Leistungseinbußen zur Folge hat.

void cm_Insertion(itemType feld[], int N) {
     int i, j;
     itemType wert;
     for(i=2; i<=N; ++i) {
         wert = feld[i];
         j = i;
         while(feld[j-1] > wert) {
             feld[j] = feld[j-1];
             --j;
         }
         feld[j] = wert;
     }
}



   Computer    Programmieren (incl. C++ Kurs)    Algorithmen    Bücher    

Zeitschriften    Heavy Metal    Mountainbiking    Meine Katze    

Über mich und die Site    Links    Downloads    Gästebuch    HP mit Umfrage