home *** CD-ROM | disk | FTP | other *** search
-
- QUIKSORT.MD2
- (* This module should be saved under the name QWKSORT.CAP. *)
-
-
- PROCEDURE QuickSort( A : ARRAY OF Item ; N : CARDINAL );
- (* Capsule QuickSort: A skeleton procedure for using the *)
- (* quicksort algorithm. See reference 3. *)
-
- PROCEDURE Compare ( S1, S2 : ARRAY OF CHAR): BOOLEAN;
- (* Compare two strings of the same maximum lengths. *)
-
- CONST eos = 0C; (* End-Of-String *)
-
- VAR Less, Stop : BOOLEAN;
- i : CARDINAL;
-
- BEGIN
- Less := FALSE;
- Stop := FALSE;
- i := 0;
- WHILE (i <= HIGH(S1)) AND (Less = FALSE) AND (Stop = FALSE) DO
- IF (S1[i] <> eos) AND (S2[i] <> eos)
- THEN (* Proceed in comparison *)
- IF (S1[i] < S2[i]) THEN Less := TRUE ELSE INC(i) END;
- ELSE Stop := TRUE (* Reached the end of string *)
- END;
- END;
- RETURN Less;
- END Compare;
-
- PROCEDURE Sort( L, R : CARDINAL);
-
- VAR i, j : CARDINAL;
- X, W : Item;
-
- BEGIN
- X := A[(L + R) DIV 2];
- REPEAT
- WHILE Compare(A[i].key,X.key) DO INC(i) END;
- WHILE Compare(X.key,A[i].key) DO DEC(j) END;
- IF i <= j THEN
- W = A[i] := A[i] ; A[i] := A[j] ; A[j] := W ;
- INC(i) ; DEC(j)
- END;
- UNTIL i > j ;
- IF L < j THEN Sort(L,j) END;
- IF i < R THEN Sort(i,R) END;
- END Sort;
-
- BEGIN
-
- Sort(1,N)
-
- END QuickSort;
-
- IF L < j THEN Sort(L,j) END;
- IF i < R THEN Sort(i,R) END;
- END Sort;
-
- BEGIN
-