SUBROUTINE KSORT(INP,NI,ISIZE,KEY,ICMP) IMPLICIT INTEGER (A-Z) INTEGER INP(NI,ISIZE),KEY(ISIZE) DIMENSION NF(200),NG(200) E=1 K=1 H=ISIZE 20 IF(E.GE.H) GOTO 100 D=KEY(E) I=E J=H 30 M=KEY(J) IF (ICMP(INP(1,M),INP(1,D)) .GE. 0) GOTO 40 KEY(I)=KEY(J) I=I+1 IF(I.EQ.J) GOTO 70 GOTO 50 40 J=J-1 IF(I.EQ.J) GOTO 70 GOTO 30 50 M=KEY(I) IF (ICMP(INP(1,M),INP(1,D)) .LE. 0) GOTO 60 KEY(J)=KEY(I) J=J-1 IF(I.EQ.J) GOTO 70 GOTO 30 60 I=I+1 IF(I.EQ.J) GOTO 70 GOTO 50 70 KEY(I)=D IF((I-E).GE.(H-I)) GOTO 80 NF(K)=I+1 NG(K)=H H=I-1 GOTO 90 80 NF(K)=E NG(K)=I-1 E=I+1 90 K=K+1 GOTO 20 100 K=K-1 IF(K.LE.0) RETURN E=NF(K) H=NG(K) GOTO 20 END