blob: 36904491d0e39963ca44a8e83476db329bdb3bad (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
GENERIC MODULE Sorting(Elem);
PROCEDURE Swap(VAR A,B:Elem.T) =
VAR Temp:Elem.T := A;
BEGIN
A := B;
B := Temp
END Swap;
PROCEDURE QuickSort(VAR A:ARRAY OF Elem.T;
READONLY Left,Right:INTEGER;
Proc:CompareProc) =
VAR
I,J:INTEGER;
Pivot:Elem.T;
BEGIN
I := Left; J := Right;
Pivot := A[(Left+Right) DIV 2];
REPEAT
WHILE Proc(Pivot,A[I]) > 0 DO INC(I) END;
WHILE Proc(Pivot,A[J]) < 0 DO DEC(J) END;
IF I <= J THEN
Swap(A[I],A[J]);
INC(I); DEC(J)
END;
UNTIL I > J;
IF Left < J THEN QuickSort(A,Left,J,Proc) END;
IF I < Right THEN QuickSort(A,I,Right,Proc) END
END QuickSort;
BEGIN
END Sorting.
|