www.pudn.com > Fortran.zip > LRQCK.FOR, change:1994-06-09,size:1110b


 
 
	SUBROUTINE LRQCK(A,N,MM,NN,M,k,L) 
	DIMENSION A(N),M(K) 
	L=1 
	NTOP=2 
	M(1)=MM 
	M(2)=NN 
10	IF (NTOP.NE.0) THEN 
	  MS=M(NTOP) 
	  KS=M(NTOP-1) 
	  NTOP=NTOP-2 
20	  IF (KS.LT.MS) THEN 
	    J=(MS+KS)/2 
	    IF ((A(KS).GE.A(MS)).AND.(A(MS).GE.A(J))) THEN 
	      I=MS 
	    ELSE IF ((A(KS).GE.A(J)).AND.(A(J).GE.A(MS))) THEN 
	        I=J 
	    ELSE 
	      I=KS 
	    END IF 
	    T=A(I) 
	    A(I)=A(KS) 
	    I=KS 
	    J=MS 
30	    IF (I.NE.J) THEN 
40	      IF ((A(J).GE.T).AND.(I.LT.J)) THEN 
	        J=J-1 
	        GOTO 40 
	      END IF 
	      IF (I.LT.J) THEN 
	        A(I)=A(J) 
	        I=I+1 
50	        IF ((A(I).LE.T).AND.(I.LT.J)) THEN 
	          I=I+1 
	          GOTO 50 
	        END IF 
	        IF(I.LT.J) THEN 
	          A(J)=A(I) 
	          J=J-1 
	        END IF 
	      END IF 
	      GOTO 30 
	    END IF 
	    A(I)=T 
	    IF (NTOP.GT.(K-2)) THEN 
	      L=0 
	      WRITE(*,60) 
	      RETURN 
	    END IF 
60	    FORMAT(1X,'FAIL') 
	    M(NTOP+1)=I+1 
	    M(NTOP+2)=MS 
	    NTOP=NTOP+2 
	    MS=I-1 
	    GOTO 20 
	  END IF 
	  GOTO 10 
	END IF 
	RETURN 
	END