Delphi-Quelltext
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:
| procedure TForm1.Sort; var i, j, x, n: integer; begin for i := 2 to 5 do begin x := a[i]; a[0] := x; j := i - 1; while x < a[j] do begin a[j+1] := a[j]; j := j - 1; end;
a[j+1] := x; stringgrid1.RowCount :=stringgrid1.RowCount + 1; for n := 0 to 4 do begin stringgrid1.Cells[n,stringgrid1.rowcount-1] := inttostr(a[n+1]); end; end; end; |
Damit ich das auch verstehe, hab ich mal die Einrückung repariert...
Wenn ich das richtig sehe, geht in (bei mir) Zeile 8 das Element a[0] verloren?

x ist das zweite Element des Arrays. Geprüft wird dann in Zeile 11, ob das zweite Element x kleiner ist als das j-te Element a[j] (wobei j=1 am Anfang). Solange das zutrifft, wird das Element a[j+1] gelöscht und a[j] reingeschrieben, dann wird j um 1 verkleinert. (nach dem ersten Durchlauf der while-Schleife ist es also 0) a[0] ist auf a[2] gesetzt worden, a[2] ist inzwischen auf a[1] gesetzt. x = (früher a[2] = ) a[0] also ist die Abfrage x < a[j] (=a[0]) false.
Diese Paar Schritte der Prozedur hatten jetzt schon 2 mal einen Informationsverlust, zuerst verlieren wir den Inhalt von a[0], dann den von a[2] - ah halt, nein, a[2] wird in x gespeichert, welches dann in a[1] gespeichert wird in Zeile 17. Naja. Einen Informationsverlust. Das sortieren müsste also eigentlich schief gehen ...
Sicher dass der Code so 1:1 stimmt?

[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.