procedure quicksort (l,r : integer); | ||
var v,t,i,j: integer; | ||
begin | ||
if r > l then | ||
begin | ||
v:=a[r]; i:=l-1; j:=r; | ||
repeat | ||
repeat i:=i+1 until a[i]>=v; | ||
repeat j:=j-1 until a[j]<=v; | ||
t:=a[i]; a[i]:=a[j]; a[j]:=t; | ||
until j<=i; | ||
a[j]:=a[i]; a[i]:=a[r]; a[r]:=t; | ||
quicksort(l,i-1); | ||
quicksort(i+1,r); | ||
end | ||
end; |
Bei dieser Implementation dient die Variable v zur Speicherung des aktuellen Wertes des "zerlegenden Elements" a[i], während i und j der linke bzw. rechte Zeiger des Durchsuchens sind. Ein zusätzlicher Austausch von a[i] und a[j] mit j<i erfolgt unmittelbar nachdem sich die Zeiger treffen, doch bevor das Treffen festgestellt und die äußere repeat-Schleife verlassen wird. Die drei Zuweisungsbefehle, die nach dieser Schleife folgen, implementieren den Austausch von a[i] und a[j] (um das zusätzliche Austauschen rückgängig zu machen) sowie von a[i] und a[r] (um das zerlegende Element an die richtige Position zu setzen). |
|
Zurück |