P95.F90

Selection sort


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

Come back to the previous page

Page builder: Charles Boivin

Last modified: 11/07/95