! ! =====> Program - P91.F90 ! INTEGER LIST (1000) COMMON /COUNTS/NCOMP,NSWAP ! ! PRINT *, 'This is Program >> P95 - Selection sort' ! ! Tell program where data for READ * is coming from OPEN(UNIT=5, FILE='P95.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 SELECT(LIST,N) ! 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 ! SUBROUTINE SELECT(LIST,N) INTEGER LIST(1),SMALL,I,J,K COMMON/COUNTS/NCOMP,NSWAP PRINT 18 18 FORMAT(' SORTING'/) NCOMP=0 NSWAP=0 L1: DO I=1,N-1 SMALL=LIST(I) K=I L2: DO J=I+1,N NCOMP=NCOMP+1 IF(LIST(J)<SMALL) THEN K=J SMALL=LIST(J) ENDIF END DO L2 CALL SWAP(LIST(I),LIST(K)) NSWAP=NSWAP+1 PRINT 16,(LIST(K),K=1,N) 16 FORMAT(20I5) END DO L1 RETURN END ! SUBROUTINE SWAP(K,L) M=K K=L L=M RETURN END DATA: 7 59 72 41 16 27 17 11 OUTPUT: Program entered This is Program >> P95 - Selection sort BEFORE SORTING 59 72 41 16 27 17 11 SORTING 11 72 41 16 27 17 59 11 16 41 72 27 17 59 11 16 17 72 27 41 59 11 16 17 27 72 41 59 11 16 17 27 41 72 59 11 16 17 27 41 59 72 AFTER SORTING 11 16 17 27 41 59 72 NUMBER OF COMPARISONS= 21 NUMBER OF EXCHANGES= 6 Fortran-90 STOP
Page builder: Charles Boivin
Last modified: 11/07/95