* * $Id: flpsor.F,v 1.1.1.1 1996/02/15 17:49:44 mclareni Exp $ * * $Log: flpsor.F,v $ * Revision 1.1.1.1 1996/02/15 17:49:44 mclareni * Kernlib * * #include "kerngen/pilot.h" SUBROUTINE FLPSOR(A,N) C C CERN PROGLIB# M103 FLPSOR .VERSION KERNFOR 3.15 820113 C ORIG. 29/04/78 C C SORT THE ONE-DIMENSIONAL FLOATING POINT ARRAY A(1),...,A(N) BY C INCREASING VALUES C C- PROGRAM M103 TAKEN FROM CERN PROGRAM LIBRARY, 29-APR-78 C DIMENSION A(N) COMMON /SLATE/ LT(20),RT(20) INTEGER R,RT C LEVEL=1 LT(1)=1 RT(1)=N 10 L=LT(LEVEL) R=RT(LEVEL) LEVEL=LEVEL-1 20 IF(R.GT.L) GO TO 200 IF(LEVEL) 50,50,10 C C SUBDIVIDE THE INTERVAL L,R C L : LOWER LIMIT OF THE INTERVAL (INPUT) C R : UPPER LIMIT OF THE INTERVAL (INPUT) C J : UPPER LIMIT OF LOWER SUB-INTERVAL (OUTPUT) C I : LOWER LIMIT OF UPPER SUB-INTERVAL (OUTPUT) C 200 I=L J=R M=(L+R)/2 X=A(M) 220 IF(A(I).GE.X) GO TO 230 I=I+1 GO TO 220 230 IF(A(J).LE.X) GO TO 231 J=J-1 GO TO 230 C 231 IF(I.GT.J) GO TO 232 W=A(I) A(I)=A(J) A(J)=W I=I+1 J=J-1 IF(I.LE.J) GO TO 220 C 232 LEVEL=LEVEL+1 IF((R-I).GE.(J-L)) GO TO 30 LT(LEVEL)=L RT(LEVEL)=J L=I GO TO 20 30 LT(LEVEL)=I RT(LEVEL)=R R=J GO TO 20 50 RETURN END