Algorithmus:
proc qs(a,l,r)
{
if then return fi
ifdef Variante 2
vertausche a[random(l,r)] mit a[r] ;
endif
p:=a[r] ;
i:=l; j:=r ;
repeat
while i<j and do i++ od
while i<j and do j- od
if i<j then vertausche a[i] und a[j];
until i==j;
vertausche a[i] und a[r];
qs(a,l,i-1);
qs(a,i+1,r);
}
Bemerkung: Der oben formulierte Algorithmus benötigt pro Durchlauf in der
Regel n+1 Schlüsselvergleiche. Lediglich wenn die beiden Indizes zusammenfallen
(was nur bei einem Pivotduplikat passieren kann), benötigt er nur n Vergleiche.
Durch geschicktes Einstreuen von if-Abfragen kann man auch in
jedem Fall mit n-1 Schlüsselvergleichen auskommen.
Komplexität von Quicksort:
Beweis: (Variante mit n-1 Vergleiche pro Durchlauf)
Sei Cn die Anzahl der Vergleichen bei dem Feld der Länge n. C0=C1=0.