{przenieś element podziału na koniec tablicy, aby sam nie brał udziału w podziale}
aktualnaPozycja := l; FOR i:=l TO r-1 DO {iteruj przez wszystkie elementy, jeśli element jest mniejszy niż wartość elementu podziału dodaj go do "lewej" strony} BEGIN IF tablica[i] < wartoscPodzialu THEN BEGIN Zamien(tablica, i, aktualnaPozycja); aktualnaPozycja := aktualnaPozycja + 1; END END Zamien(tablica, aktualnaPozycja, r); {wstaw element podziału we właściwe miejsce} return aktualnaPozycja; END
{ podstawowa implementacja wyboru punktu podziału - wybiera element "środkowy" w tablicy } PROCEDURE WybierzPunktPodzialu(l, r) BEGIN return l + (r-l) div 2; END
{ zamienia miejscami elementy w komórkach i1, i2 } PROCEDURE Zamien(tablica, i1, i2) BEGIN IF i1<>i2 THEN BEGIN aux := tablica[i1]; tablica[i1] := tablica[i2]; tablica[i2] := aux; END END
Właściwe działanie algorytmu wymaga, aby procedura PodzielTablice pozostawiała element rozdzielający na końcu lewej części uzyskanej z podziału. Wówczas element ten znajduje się na swojej ostatecznej pozycji i nie podlega dalszemu przetwarzaniu – rekurencyjne wywołania Quicksort nie obejmują indeksu i.