! PROGRAM P91 ! IMPLICIT NONE INTEGER :: LIST(1000),COUNTS,NCOMP,NSWAP INTEGER :: N,I ! INTERFACE SUBROUTINE SORT1(LIST,N,COUNTS,NCOMP,NSWAP) IMPLICIT NONE INTEGER ,INTENT(IN OUT) :: LIST(:),N,COUNTS,NCOMP,NSWAP SUBROUTINE SWAP(LIST,K,L) IMPLICIT NONE INTEGER ,INTENT(IN OUT) :: LIST(:),K,L END SUBROUTINE SWAP END SUBROUTINE SORT1 END INTERFACE ! ! PRINT *, 'This is Program >> P91 - Interchange sort' ! ! Tell program where data for READ * is coming from OPEN(UNIT=5, FILE='P91.DAT') ! UNIT=5 is the default input ! READ * ,N READ * ,(LIST(I),I=1,N) PRINT 17 17 FORMAT(' BEFORE SORTING'/) PRINT 16,(LIST(I),I=1,N) PRINT *,' ' ! ! SORT WITH SUBROUTINES ! CALL SORT1(LIST,N,COUNTS,NCOMP,NSWAP) ! PRINT 14 14 FORMAT(' AFTER SORTING'/) PRINT 16,(LIST(I),I=1,N) 16 FORMAT(20I5) PRINT 27,NCOMP,NSWAP 27 FORMAT(' NUMBER OF COMPARISONS=',I3/ & ' NUMBER OF EXCHANGES=',I3//) STOP END PROGRAM P91 ! SUBROUTINE SORT1(LIST,N,COUNTS,NCOMP,NSWAP) IMPLICIT NONE INTEGER ,INTENT(IN OUT) :: LIST(:),N,COUNTS,NCOMP,NSWAP INTEGER :: I,J,K PRINT 18 18 FORMAT(' SORTING'/) NCOMP=0 NSWAP=0 L1: DO I=1,N-1 L2: DO J=I+1,N NCOMP=NCOMP+1 IF(LIST(I).GT.LIST(J)) THEN CALL SWAP(LIST,I,J) NSWAP=NSWAP+1 ENDIF END DO L2 PRINT 16,(LIST(K),K=1,N) 16 FORMAT(20I5) END DO L1 RETURN END SUBROUTINE SORT1 ! SUBROUTINE SWAP(LIST,K,L) IMPLICIT NONE INTEGER ,INTENT(IN OUT) :: LIST(:),K,L INTEGER :: M M=LIST(K) LIST(K)=LIST(L) LIST(L)=M RETURN END SUBROUTINE SWAP