Verstehe i=i-1 nicht am Ende Insertion Sort?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo.

Du hast hierbei zwei Schleifen. Die äußere fängt beim zweiten Element an und geht bis zum letzten Element. Dabei wird das aktuelle Element als key gespeichert und der Index des vorherigen Element (beim ersten Durchlauf also das erste Element) wird als Initialvariable genutzt.

Damit die Schleife eine gültige Abbruchbedingung hat, soll sie natürlich nur bis zum ersten Element überprüfen und nicht davor.

Vereinfacht ausgedrückt:

2tes bis n-tes Element steht in key und key wird so lange nach links verschoben, wie der Inhalt von key größer als der Inhalt von A[i] ist.

Zur Veranschaulichung:

  • Erster Durchlauf
j=2, i=1, key=29, A[i]=31 -> 29 wird vor die 31 gepackt.
i = 0, while schleife bricht ab.
  • Zweiter Durchlauf
j=3, i=2, key=59, A[i]=31 -> 59 > 31 daher wird die while Schleife nicht betreten.
  • Dritter Durchlauf
j=4, i=3, key=26, A[i]=59 -> 26 wird vor die 59 gepackt.
i=2, A[i]=31 -> 26 wird vor die 31 gepackt
i=1, A[i]=29 -> 26 wird vor die 29 gepackt
i=0 und damit <1, while schleife bricht ab.

usw.

Ich hoffe, das erklärt die Notwendigkeit für i = i - 1.

Woher ich das weiß:Studium / Ausbildung – Diplom Wirtschaftsinformatiker

i=i-1 bedeutet das der inhalt von i minus 1 gerechnet wird