File: shellsort.F

package info (click to toggle)
pyferret 7.6.5-10
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 138,136 kB
  • sloc: fortran: 240,609; ansic: 25,235; python: 24,026; sh: 1,618; makefile: 1,123; pascal: 569; csh: 307; awk: 18
file content (43 lines) | stat: -rw-r--r-- 953 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
      SUBROUTINE SHELL(SDAT, IDAT,N)


*from http://www.cs.mcgill.ca/~ratzer/progs15_6.html  23-APR-1998
* Changed data to REAL. Added IDAT, to sort along with SDAT.  
* Removed NCOUNTS, NCOMP, NSWAP.

      REAL     SDAT(*)
      INTEGER  IDAT(*), N, M
      INTEGER  I, J
      M=N
      DO WHILE (M .gt. 1)
         M=(M+2)/3
         DO I=M+1,N
            DO J=I,M+1,-M
               IF(SDAT(J-M) .ge. SDAT(J)) then
                 CALL SWAPR(SDAT,J,J-M)
                 CALL SWAPI(IDAT,J,J-M)
               endif
            END DO 
         END DO 
      END DO
      RETURN
      END !SUBROUTINE SHELL
!

      SUBROUTINE SWAPI(IDAT,K,L)
      INTEGER IDAT(*),K,L
      INTEGER M
      M=IDAT(K)
      IDAT(K)=IDAT(L)
      IDAT(L)=M
      RETURN
      END !SUROUTINE SWAPI

      SUBROUTINE SWAPR(SDAT,K,L)
      REAL SDAT(*), S
      INTEGER K,L
      S=SDAT(K)
      SDAT(K)=SDAT(L)
      SDAT(L)=S
      RETURN
      END !SUROUTINE SWAP