File: QSORT.PS of Tape: Various/Decus/decus-3
(Source file text) 

  PROCEDURE SORT(L,R: INDEX);
    VAR I,J: INDEX;  X,H: ITEM;

  BEGIN  I := L;  J := R;
      X := A[ (L+R) DIV 2 ];
      REPEAT
          WHILE A[I]<X DO I := I+1;
          WHILE X<A[J] DO J := J-1;
          IF I<=J THEN
          BEGIN  H := A[I];  A[I] := A[J];  A[J] := H;
              I := I+1;  J := J-1
          END
      UNTIL I>J;
      IF L<J THEN SORT(L,J);
      IF I<R THEN SORT(I,R)
  END (* SORT *);