C===================================================== SORT.FOR SUBROUTINE SORT(X,N) C*********************************************************************** C* * C* FORTRAN CODE WRITTEN FOR INCLUSION IN IBM RESEARCH REPORT RC20525, * C* 'FORTRAN ROUTINES FOR USE WITH THE METHOD OF L-MOMENTS, VERSION 3' * C* * C* J. R. M. HOSKING * C* IBM RESEARCH DIVISION * C* T. J. WATSON RESEARCH CENTER * C* YORKTOWN HEIGHTS * C* NEW YORK 10598, U.S.A. * C* * C* VERSION 3 AUGUST 1996 * C* * C*********************************************************************** C C SORTS THE ARRAY X INTO ASCENDING ORDER C C PARAMETERS OF ROUTINE: C X *IN/OUT* ARRAY OF LENGTH N. CONTAINS THE NUMBERS TO BE SORTED. C ON EXIT, CONTAINS THE SORTED NUMBERS. C N * INPUT* NUMBER OF ELEMENTS TO BE SORTED C C METHOD USED IS SHELL SORT WITH SEQUENCE OF INCREMENTS AS IN C D.F.KNUTH (1969) 'THE ART OF COMPUTER PROGRAMMING', VOL.3, P.95 C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION X(N) IF(N.LE.1)RETURN J=4 DO 10 I=1,100 J=3*J+1 IF(J.GE.N)GOTO 20 10 CONTINUE 20 CONTINUE M=(J/3) DO 60 MM=1,100 M=M/3 IF(M.EQ.0)RETURN DO 50 I=M+1,N TEST=X(I) J=I DO 30 JJ=1,100 J=J-M IF(J.LE.0)GOTO 40 IF(TEST.GE.X(J))GOTO 40 30 X(J+M)=X(J) 40 CONTINUE 50 X(J+M)=TEST 60 CONTINUE END