Thema: Delphi Fehler bei Quicksort

Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.774 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Fehler bei Quicksort

  Alt 14. Aug 2006, 18:05
Delphi-Quellcode:
procedure TForm1.QuickSort(von, bis: Integer);
var l, r, v, hilf: integer;
begin
  l := von;
  r := bis;
  v := Feld[(l + r) div 2];
  while l <= r do
  begin
    while (Feld[l] < v) do
      l := l + 1;
    while (Feld[r] > v) do
      r := r - 1;
    If l <= r then
    begin
      hilf := Feld[r];
      Feld[r] := Feld[l];
      Feld[l] := hilf;
      l := l + 1;
      r := r - 1;
    end;
  end;
  If von < r then QuickSort(von, r);
  If bis > l then QuickSort(l, bis);
end;
Versuch es mal so.

Dein Fehler ist gewesen, dass Du mit dem Feld[v] vergleichst.
Das Feld[v] kann sich aber in der while do Schleife ändern,
es sollte sich aber dort nicht ändern.

Deshalb ist es besser vor der while Schleife den Wert von Feld[v] zu speichern
und damit zu vergleichen.
Ist in Wikipedia aber auch so beschrieben.

Hier noch ein Quicksort mit Repeat until: http://www.dsdt.info/tipps/?id=380

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat