Also als Assistent finde ich das ganze erschreckend gut. Ich hab hier mal folgende Frage gestellt:
Bitte vervollständige folgenden Code:
procedure Sort(const List: TStringlist); begin for i:=0 to List.Count-1 do for j:=0 to List.Count-1 do if list[I]<list[j] do begin list[I] := List[j]; list[j] := List[I]; end; end;
Mir ist klar, dass das Bubblesort Beispiel Fehler hat, die hab ich wissentlich integriert. Die Antwort war folgende:
Das gegebene Sortierverfahren ist nicht korrekt. Es gibt zwei Fehler im Code:
Die Zuweisungen list[I] := List[j] und list[j] := List[I] tauschen die Werte der beiden Listenpositionen nicht korrekt aus. Der korrekte Tausch sollte wie folgt aussehen:
temp := List[I];
List[I] := List[j];
List[j] := temp;
Das Sortierverfahren ist ineffizient, da es eine quadratische Laufzeit hat. Es vergleicht jedes Element mit jedem anderen Element, was dazu führt, dass die Anzahl der Vergleiche exponentiell mit der Größe der Liste wächst. Eine effizientere Möglichkeit, Listen zu sortieren, ist beispielsweise der QuickSort-Algorithmus.
Hier ist eine korrigierte Version des gegebenen Codes:
Delphi-Quellcode:
procedure Sort(const List: TStringlist);
var
i, j: integer;
temp: string;
begin
for i := 0 to List.Count - 1 do
for j := i + 1 to List.Count - 1 do
if List[i] > List[j] then
begin
temp := List[i];
List[i] := List[j];
List[j] := temp;
end;
end;
In dieser Version werden nur Paare von Elementen verglichen, die noch nicht verglichen wurden. Außerdem werden die Werte korrekt ausgetauscht.