Quicksort in PASCAL
PROGRAM Qick;
CONST max = 100;
TYPE Feld = ARRAY[1..max] OF INTEGER;
VAR A : Feld;
n,i: INTEGER;
PROCEDURE Quicksort (VAR A : Feld; l,r: INTEGER);
(* sortiert den Abschnitt A[l], ..., A[r] *)
VAR m: INTEGER;
FUNCTION Divide(VAR A: Feld; l,r: INTEGER): INTEGER;
(* teilt A gemaess einem Pivotelement in einen linken Teil *)
(* mit Elementen, die kleiner sind als das Pivotelement, *)
(* und einen rechten Teil, mit groesseren Elementen. *)
VAR pivot,i,j : INTEGER;
PROCEDURE Vertausche(VAR A: Feld; s,t: INTEGER);
(* vertauscht A[s] mit A[t] *)
VAR b : INTEGER;
BEGIN
b:=A[s]; A[s]:=A[t]; A[t]:=b
END; { Vertausche }
BEGIN { Divide }
pivot := A[r];
i := l-1;
j := r+1;
REPEAT
REPEAT i := i+1 UNTIL pivot <= A[i];
REPEAT j := j-1 UNTIL pivot >= A[j];
Vertausche(A,i,j)
UNTIL j <= i;
Vertausche(A,i,j); (* mache letzte Vertauschung der Repeat-Schleife *)
(* rueckgaengig, da dort bereits j <= i galt. *)
Divide := i (* Aufteilung von A ist A[l..i-1] und A[i..r]. *)
END; { Divide }
BEGIN { Quicksort }
IF l < r THEN
BEGIN
m := Divide(A,l,r);
Quicksort(A,l,m-1);
Quicksort(A,m,r)
END
END; { Quicksort }
BEGIN (* Hauptprogramm *)
n:=10;
(* Erzeuge Zahlenfolge A *)
randomize;
FOR i:=1 TO n DO
BEGIN
A[i] := random(100); write(A[i],' ')
END; writeln;
Quicksort(A,1,n);
FOR i:=1 TO n DO write(A[i],' ')
END.