! ! =====> 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
Page builder: Charles Boivin
Last modified: 11/07/95