!
! =====> 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