Einzelnen Beitrag anzeigen

Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Problem mit Quicksort-Implementierung

  Alt 10. Jun 2009, 16:34
Darf es auch die rekursive Variante sein, die finde ich übersichtlicher. Die Stellen mit Operatoren, die für aufsteigend/absteigend gedreht werden müssen, beschränkt sich da auf zwei Stück
Delphi-Quellcode:
procedure QuickSort(var A: array of Integer);

  procedure QSort(LoIndex, HiIndex: Integer);
  var
    Lo, Hi: Integer;
    Pivot: Integer;
    Swap: Integer;
  begin
    Pivot := A[(LoIndex + HiIndex) div 2];
    Lo := LoIndex;
    Hi := HiIndex;

    repeat
      while A[Lo] < Pivot do Inc(Lo); // Hier Operator drehen
      while A[Hi] > Pivot do Dec(Hi); // Hier auch
      if Lo <= Hi then
      begin
        if Lo < Hi then
        begin
          Swap := A[Lo];
          A[Lo] := A[Hi];
          A[Hi] := Swap;
        end;
        Inc(Lo);
        Dec(Hi);
      end;
    until Lo > Hi;

    if LoIndex < Hi then QSort(LoIndex, Hi);
    if Lo < HiIndex then QSort(Lo, HiIndex);
  end;

begin
  QSort(Low(A), High(A));
end;
Ansonsten:

bei Deiner Version müsstest Du prüfen, ob Du (zum original Code) die Operatoren auch nur dort gedreht hast, wo Werte verglichen werden. Dort wo der Index verglichen wird, muss der Operator gleich bleiben.
  Mit Zitat antworten Zitat