Home > Informatik > Einführung in die OOP > 5. Sortieren und Suchen > 5.4 Der Insertionsort

5.4 Der Insertionsort

Video zum Insertionsort

Ein sehr schön gemachtes und anschauliches Video zum Insertionsort, in dem auch auf das Zeitverhalten des Algorithmus eingegangen wird. Unbedingt anschauen!

Allgemeines

Der Insertionsort ("Sortieren durch direktes Einfügen") ist ein weiteres einfaches Sortierverfahren. Ähnlich wie beim Selectionsort besteht der zu sortierende Array aus zwei Teilen, dem bereits sortierten Teil und dem noch unsortierten Teil.

Beim Insertionsort wird das erste Arrayelement als bereits sortiert angesehen, der sortierte Teil besteht also aus einem Element, der unsortierte aus dem Rest des Arrays.

Nun wird die erste Zahl des unsortierten Teils genommen (nicht gesucht!) und an der richtigen Position in den bereits sortierten Teil eingefügt. Danach besteht der sortierte Teil aus zwei Zahlen und der unsortierte Teil ist um ein Element geschrumpft.

Im zweiten Durchgang wird das Gleiche gemacht: Nimm die erste Zahl des unsortierten Teils und füge an der richtigen Stelle in den sortierten Teil ein. Danach wächst dieser um 1 und der unsortierte Teil schrumpft um 1.

Das Ganze wird solange wiederholt, bis der gesamte Array sortiert ist.

Im Grunde ist der Insertionsort das Sortierverfahren, das man auch bei vielen Kartenspielen benutzt. Man nimmt zunächst alle Karten in die Hand und breitet sie fächerartig aus. Dann sortiert man die Karten, indem man die jeweils nächste Karte an die richtige Stelle im bereits sortierten Teil steckt.

Übungen

Übung 5.4-1

Erstellen Sie eine kleine Präsentation, die in mehreren Schritten zeigt, wie der Insertionsort funktioniert.

Übung 5.4-2

Betrachten Sie den folgenden Quelltext für einen Insertionsort:

  public void insertionSort()
    {
        for (int i = 1; i < numbers.length; i++)
        {
            int value = numbers[i];
            int pos = i;

            while (pos > 0 && numbers[pos - 1] > value)
            {
                numbers[pos] = numbers[pos - 1];
                pos--;
            }

            numbers[pos] = value;
        }
    }    

Erläutern Sie das genaue Vorgehen dieser Methode unter besonderer Berücksichtigung der while-Schleife.

⇒ Kopieren Sie sich den obigen Quelltext in Ihr Java-Projekt, bringen Sie ihn zum Laufen und ermitteln Sie dann die Sortierzeiten für 1000, 2000, 5000, ... Zahlen und vergleichen Sie die Laufzeit des Insertionsort mit der des Selection- und Bubblesort.

Hinweise zur Zeiterfassung von Algorithmus finden Sie in der Abteilung "Begriffe und Konzepte" im Artikel "Zeiterfassung".

Seitenanfang
Weiter mit der Klasse IntArrayTools ...