Home meiner WebpräsenzStartseite
Das Menü auf einem Blick!Sitemap
Downloads vorliegender WebSiteDownloads
Hilfeseite vorliegender HomepageHilfe
Erscheinungsvermerk vorliegender HomepageImpressum










InsertionSort
Ein recht ineffizienter Sortieralgorithmus ist der InsertionSort!
1 Einführung
2 Implementierung
Einführung

Definition
Der InsertionSort ist das duale Gegenstück zum SelectionSort. Es wird zwar auch in ein Element und den Rest zerlegt, aber jetzt wird die ganze Arbeit nicht in die Zerlegung, sondern in die Komposition gesteckt. Man nimmt das erste Element der Liste weg, sortiert rekursiv die Restliste und fügt dann das erste Element an der passenden Stelle ein. [FUNPROG]
Komplexität
Der Aufwand ist hier quadratisch, weil das Einsortieren im Schnitt die halbe Liste abarbeiten muss, bis die richtige Stelle gefunden ist. [FUNPROG]
Beispiel: Sortieren von Spielkarten
Der Spieler nimmt eine Karte nach der anderen auf und sortiert sie in die bereits aufgenommenen Karten ein. Dieser Algorithmus wird InsertionSort genannt. [INFO2002]
Konkretes Zahlenbeispiel
Dabei sei nun [8,2,5,3,9,1,6,7,4] die zu sortierende Liste:
1[8,2,5,3,9,1,6,7,4][]
2[2,5,3,9,1,6,7,4][8]
3[5,3,9,1,6,7,4][2,8]
4[3,9,1,6,7,4][2,5,8]
5[9,1,6,7,4][2,3,5,8]
6[1,6,7,4][2,3,5,8,9]
7[6,7,4][1,2,3,5,8,9]
88[7,4][1,2,3,5,6,8,9]
99[4][1,2,3,5,6,7,8,9]
1010[][1,2,3,4,5,6,7,8,9]
Implementierung

Implementierung mit SML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(* insertionsort: klar!
   insert: Hilfsfunktion *)


fun insertionsort nil = nil
  | insertionsort (e::el) =
      let
        fun insert a nil = [a]
          | insert a (x::xl) =
              if (<= x)
                then a :: (:: xl)
                else x :: (insert a xl)
      in
        insert e (insertionsort el)
      end;

(* Anwendungsbeispiel *)

val output1 = insertionsort [3, 6, 2, 9, 1, 8, 7, 4, 5];
val output2 = insertionsort [7, 7, 7, 2, 7, 2, 2, 2];
val output3 = insertionsort [~3, 3, ~2, 2];

(* Ausgabe:
   val output1 = [1,2,3,4,5,6,7,8,9] : int list
   val output2 = [2,2,2,2,7,7,7,7] : int list
   val output3 = [~3,~2,2,3] : int list *)
Implementierung mit Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
unit UInsertionsort;

interface

procedure InsertionSort(var A: array of Integer);

implementation

procedure InsertionSort(var A: array of Integer);
var
  I, J: Integer;
  Elem: Integer;
begin
  for I := Low(A) + 1 to High(A) do
    if (A[I] < A[- 1]) then
    begin
      Elem := A[I];
      J := I;
      while ((> Low(A)) and (A[- 1] > Elem)) do
      begin
        A[J] := A[- 1];
        Dec(J);
      end;
      A[J] := Elem;
    end;
end;

end.
Implementierung mit Prolog
1
2
3
4
5
6
7
% ?-insertionsort([8, 2, 5, 3, 9, 1, 6, 7, 4], SL).

insertionsort([], []).
insertionsort([X|L], SL) :- insertionsort(L, ZSL), insert_(X, ZSL, SL).

insert_(X, [Y|SL1], [Y|SL2]) :- X > Y, !, insert_(X, SL1, SL2).
insert_(X, SL, [X|SL]).
Allgemein

Diese Seite ist Bestandteil der Domäne www.stefan−baur.de und heißt InsertionSort. Die letzte Änderung erfuhr diese Seite am Sonntag, den 15. März 2009 von Stefan K. Baur. Zuletzt wurde sie von Ihnen am Mittwoch, den 8. September 2010 um 3:44 Uhr im Internet besucht. Sie gelangen zur vorliegenden Seite, wenn Sie ausgehend von der Startseite über dem Hauptmenü wie folgt navigieren:
Startseite
Informatik
Algorithmen
Sortieren
InsertionSort
Die vorliegende Seite verfügt über folgenden Menüunterpunkt:
ShellSort
Ein verbesserter InsertionSort, aber immer noch recht ineffizient, ist der ShellSort!
Wenn Sie die vorliegende Seite ausdrucken möchten, nutzen Sie dazu die Printversion.
Literaturangaben

[FUNPROG]  Prof. Dr. Peter Pepper (TU Berlin):  Funktionale Programmierung,  Springer−Verlag,  1999,  ISBN 3−540−64541−1.  In OPAL, ML, HASKELL und GOFER mit 34 Abbildungen

[INFO2002]  Heinz−Peter Gumm,  Manfred Sommer:  Einführung in die Informatik,  Oldenbourg Verlag,  5. Auflage,  2002,  ISBN 3−486−25635−1.

Weitere Literatur, die zur Erstellung vorliegender Homepage beigetragen hat, finden Sie unter Literaturverzeichnis.
Autoren

Werden Sie Autor vorliegender Homepage, informieren Sie sich unter Autoren.
Siehe auch ...

ShellSort
Ein verbesserter InsertionSort, aber immer noch recht ineffizient, ist der ShellSort!
Look & Feel

Das aktuelle Design trägt den Namen „Design 2007”.
Falls Ihnen jedoch das aktuelle Design nicht zusagen sollte, so stehen Ihnen noch andere, alternative Designs zur Verfügung:
Design 2010
Design 2009
Design 2008
Design 2006
Design 2005
Design 2004
Copyright

Vorliegender Webauftritt wurde in mühevoller Kleinarbeit von Stefan K. Baur entwickelt.
Copyright (c) 2004-2010 Stefan K. Baur
Home meiner WebpräsenzStartseite
Das Menü auf einem Blick!Sitemap
Downloads vorliegender WebSiteDownloads
Hilfeseite vorliegender HomepageHilfe
Erscheinungsvermerk vorliegender HomepageImpressum