Thema: Delphi Quicksort

Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#11

Re: Quicksort

  Alt 1. Mai 2006, 11:37
Zitat:
aber warum muss es "<=" sein ? wenn die doch gleich sind also auf einem "Punkt" stehen kann man die ja schlecht tauschen, also es macht keinen großen oder ?
Bonanza,
Schau Dir doch mal die Repeat Schleife an.
Nimm an, die beiden While Schleifen seien abgearbeitet und l_pos ist gleich r_pos.
Wenn jetzt weder l_pos noch r_pos verändert wird, dann wird die beim until definierte Abbruchbedingung ganz sicher nicht erfüllt.
Also wird die Repeat Schleife wiederholt, mit dem Ergebnis, daß sich an l_pos und r_pos nichts ändert.
Tja, und dann läuft dein Programm in einer Endlos-Schleife.

Wenn l_pos = r_pos ist müssen a[l_pos] und a[r_pos] nicht vertauscht werden (es ist aber auch nicht schädlich).
Wichtig ist nur, daß l_pos um erhöht und r_pos gesenkt wird.

Delphi-Quellcode:
   repeat
      while a[l_pos] < pivot do inc(l_pos);
      while a[r_pos] > pivot do dec(r_pos);
      if l_pos <= r_pos then begin
         temp := a[l_pos];
         a[l_pos] := a[r_pos];
         a[r_pos] := temp;
         inc(l_pos);
         dec(r_pos);
      end;
   until (l_pos > r_pos) ;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat