SUBROUTINE SSORT (ARRAY,INDEX,LENGTH) C REAL ARRAY,TSAVE,TTEMP C REAL INDEX,ISAVE,ITEMP INTEGER*4 ARRAY,TSAVE,TTEMP INTEGER*2 INDEX,ISAVE,ITEMP DIMENSION ARRAY(1),INDEX(1),IUPPER(14),ILOWER(14) IFIRST=1 I=IFIRST J=LENGTH M=1 5 IF (I.GE.J) GOTO 70 10 K=I IJ=(I+J)/2 TSAVE=ARRAY(IJ) ISAVE=INDEX(IJ) IF (ARRAY(I).LE.TSAVE) GOTO 20 ARRAY(IJ)=ARRAY(I) ARRAY(I)=TSAVE TSAVE=ARRAY(IJ) INDEX(IJ)=INDEX(I) INDEX(I)=ISAVE ISAVE=INDEX(IJ) 20 L=J IF (ARRAY(J).GE.TSAVE) GOTO 40 ARRAY(IJ)=ARRAY(J) ARRAY(J)=TSAVE TSAVE=ARRAY(IJ) INDEX(IJ)=INDEX(J) INDEX(J)=ISAVE ISAVE=INDEX(IJ) IF (ARRAY(I).LE.TSAVE) GOTO 40 ARRAY(IJ)=ARRAY(I) ARRAY(I)=TSAVE TSAVE=ARRAY(IJ) INDEX(IJ)=INDEX(I) INDEX(I)=ISAVE ISAVE=INDEX(IJ) GOTO 40 30 ARRAY(L)=ARRAY(K) ARRAY(K)=TTEMP INDEX(L)=INDEX(K) INDEX(K)=ITEMP 40 L=L-1 IF (ARRAY(L).GT.TSAVE) GOTO 40 TTEMP=ARRAY(L) ITEMP=INDEX(L) 50 K=K+1 IF (ARRAY(K).LT.TSAVE) GOTO 50 IF (K.LE.L) GOTO 30 IF (L-I.LE.J-K) GOTO 60 ILOWER(M)=I IUPPER(M)=L I=K M=M+1 GOTO 80 60 ILOWER(M)=K IUPPER(M)=J J=L M=M+1 GOTO 80 70 M=M-1 IF (M.EQ.0) RETURN I=ILOWER (M) J=IUPPER (M) 80 IF (J-I.GE.11) GOTO 10 IF (I.EQ.IFIRST) GOTO 5 GOTO 95 90 I=I+1 95 IF (I.EQ.J) GOTO 70 TSAVE=ARRAY(I+1) ISAVE=INDEX(I+1) IF (ARRAY(I).LE.TSAVE) GOTO 90 K=I 100 ARRAY(K+1)=ARRAY(K) INDEX(K+1)=INDEX(K) K=K-1 IF (TSAVE.LT.ARRAY(K)) GOTO 100 ARRAY(K+1)=TSAVE INDEX(K+1)=ISAVE GOTO 90 END