++ Mathe Formeln ++ Mathematik Lexikon ++ Lösungen ++ Hausaufgaben ++ Algebra ++ Lernen ++ Übungen ++ Schule ++ Geometrie ++

Navigation

Mathematik Begriffe
A B C D E
F G H I J
K L M N O
P Q R S T
U V W X Y
Z 123      
Goldkurs

Mathematik Begriff Erklärung Insertionsort Formel Hilfe Hausaufgabeb
Insertionsort

InsertionSort (engl. insertion - Einfügen) ist ein einfacher stabiler Sortieralgorithmus.

Inhaltsverzeichnis
1 Prinzip
2 Beispiel
3 Implementierung
4 Komplexität
5 Verwandter Sortieralgorithmus
6 Weblinks

 

Prinzip

Der Algorithmus entnimmt der unsortierten Eingabemenge ein beliebiges (z.B. das erste) Element und fügt es an richtiger Stelle in die (anfangs leere) sortierte Ausgabemenge ein. Dieser Vorgang wiederholt sich solange, bis alle Elemente (ein)sortiert sind.

 

Beispiel

Hier ein Beispiel anhand einer zu sortierenden Menge aus 5 Integer-Werten:

 unsortierte Eingabemenge: [ 3 2 5 1 4 ]

 -------------------------------------------------------------------------------

 [| 3 2 5 1 4 ]            Das erste Element wird der Eingabemenge entnommen und
    ^                      zwischengespeichert.

 [ _ | 2 5 1 4]            Alle in der Ausgabemenge vorhandenen größeren
                           Elemente werden, vom Ende der Ausgabemenge beginned,
                           um jeweils eine Stelle nach rechts verschoben.
                           Dabei wird das zwischengespeicherte Element in der
                           Eingabemenge überschrieben.

 [ 3 | 2 5 1 4]            Das zwischengespeicherte Element wird in das durch
                           die Verschiebung der Elemente in der Ausgabemenge
                           freigewordene Feld geschrieben.

 -------------------------------------------------------------------------------

 [ 3 | 2 5 1 4]            Das nächste Element wird der Eingabemenge entnommen
       ^                   und zwischengespeichert.

 [ _ 3 | 5 1 4]            Alle in der Ausgabemenge vorhandenen größeren
                           Elemente werden, vom Ende der Ausgabemenge beginned,
                           um jeweils eine Stelle nach rechts verschoben.
                           Dabei wird das zwischengespeicherte Element in der
                           Eingabemenge überschrieben.

 [ 2 3 | 5 1 4]            Das zwischengespeicherte Element wird in das durch
                           die Verschiebung der Elemente in der Ausgabemenge
                           freigewordene Feld geschrieben.

 -------------------------------------------------------------------------------

 [ 2 3 | 5 1 4]            Das nächste Element wird der Eingabemenge entnommen
         ^                 und zwischengespeichert.

 [ 2 3 _ | 1 4]            Alle in der Ausgabemenge vorhandenen größeren
                           Elemente werden, vom Ende der Ausgabemenge beginned,
                           um jeweils eine Stelle nach rechts verschoben.
                           Dabei wird das zwischengespeicherte Element in der
                           Eingabemenge überschrieben.

 [ 2 3 5 | 1 4]            Das zwischengespeicherte Element wird in das durch
                           die Verschiebung der Elemente in der Ausgabemenge
                           freigewordene Feld geschrieben.

 -------------------------------------------------------------------------------

 [ 2 3 5 | 1 4]            Das nächste Element wird der Eingabemenge entnommen
           ^               und zwischengespeichert.

 [ _ 2 3 5 | 4]            Alle in der Ausgabemenge vorhandenen größeren
                           Elemente werden, vom Ende der Ausgabemenge beginned,
                           um jeweils eine Stelle nach rechts verschoben.
                           Dabei wird das zwischengespeicherte Element in der
                           Eingabemenge überschrieben.

 [ 1 2 3 5 | 4]            Das zwischengespeicherte Element wird in das durch
                           die Verschiebung der Elemente in der Ausgabemenge
                           freigewordene Feld geschrieben.

 -------------------------------------------------------------------------------

 [ 1 2 3 5 | 4]            Das nächste Element wird der Eingabemenge entnommen
             ^             und zwischengespeichert.

 [ 1 2 3 _ 5 |]            Alle in der Ausgabemenge vorhandenen größeren
                           Elemente werden, vom Ende der Ausgabemenge beginned,
                           um jeweils eine Stelle nach rechts verschoben.
                           Dabei wird das zwischengespeicherte Element in der
                           Eingabemenge überschrieben.

 [ 1 2 3 4 5 |]            Das zwischengespeicherte Element wird in das durch
                           die Verschiebung der Elemente in der Ausgabemenge
                           freigewordene Feld geschrieben.

 -------------------------------------------------------------------------------

 sortierte Ausgabemenge: [ 1 2 3 4 5 ]

 

Implementierung

Hier eine Implementierung in Pascal:

PROCEDURE InsertionSort(var Menge: MengeIntegerTyp; Links, Rechts: INTEGER;)
VAR
 Index, Einfuegeposition, Zwischenspeicher: INTEGER;
BEGIN
  FOR Index := Links + 1 TO Rechts DO
  BEGIN
    Zwischenspeicher := Menge[Index];
    Einfuegeposition := Index;
    WHILE ((Menge[Einfugeposition - 1] > Menge[Einfuegeposition]) AND
           (Einfuegeposition > Links)) DO
    BEGIN
      Menge[Einfuegeposition] := Menge[Einfuegeposition - 1];
      Einfuegeposition := Einfuegeposition - 1;
    END;
  END;
  Menge[Einfuegeposition] := Zwischenspeicher;
END;

Hinweise:

Mit MengeIntegerTyp ist ein beliebig großes Array für Integer-Werte gemeint, Links und Rechts sind die Grenzen dieses Arrays. Eine effizientere Implementierung ist möglich, wenn anstatt der Bedingung Einfuegeposition > Links in der While-Schleife ein sog. Stopelement verwendet wird.

 

Komplexität

Die Anzahl der Vergleiche und Verschiebungen des Algorithmus ist von der Anordnung der Elemente in der unsortierten Eingangsmenge abhängig. Für den Average-Case ist eine Abschätzung der Laufzeit daher nicht so einfach möglich. Im Best-Case ist die Komplexität jedoch linear, im Worst-Case dagegen quadratisch.

 

Verwandter Sortieralgorithmus

D.L. Shell schlug eine substantielle Verbeserung dieses Algorithmus vor, das heute unter dem Namen Shellsort bekannt wurde. Statt benachbarte Elemente werden Element, die durch eine bestimmte Distanz voneinander getrennt sind, verglichen. Diese Distanz wird bei jedem Durchgang verringert.

 

Weblinks

  • http://www.inf.ethz.ch/~staerk/algorithms/SortAnimation.html Java Beispiele (http://www.inf.ethz.ch/~staerk/algorithms/SortAnimation.html)
Dieser Artikel ( Insertionsort ) stammt aus Wikipedia, der freien Enzyklopädie
und steht unter der GNU Free Documentation Licence. 
+++ Mathe Formeln ++ Mathematik Lexikon ++ Lösungen ++ IMPRESSUM ++ Algebra ++ Lernen ++ Übungen ++ Schule ++ Geometrie +++