P96.F90

Shell sort


!
! =====> Program - P96.F90
!
      INTEGER LIST (1000)
      COMMON /COUNTS/NCOMP,NSWAP
!
!
      PRINT *, 'This is Program >> P96  - Shell sort'
!
!     Tell program where data for  READ *  is coming from
      OPEN(UNIT=5, FILE='P96.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 SHELL(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 SHELL(LIST,N)
      INTEGER LIST(1)
      COMMON /COUNTS/NCOMP,NSWAP
      NCOMP=0
      NSWAP=0
      M=N
L1:   DO WHILE (M > 1)
         M=(M+2)/3
L2:      DO I=M+1,N
L3:         DO J=I,M+1,-M
               NCOMP=NCOMP+1
               IF(LIST(J-M) < LIST(J)) EXIT
               CALL SWAP(LIST(J),LIST(J-M))
               NSWAP=NSWAP+1
            END DO L3
         END DO L2
      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 >> P96  - Shell sort

BEFORE SORTING

   59   72   41   16   27   17   11
  

AFTER SORTING

   11   16   17   27   41   59   72
NUMBER OF COMPARISONS= 16
NUMBER OF EXCHANGES= 10


Fortran-90 STOP

Come back to the previous page

Page builder: Charles Boivin

Last modified: 11/07/95