File: sort.f90

package info (click to toggle)
wsjtx 2.7.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 70,440 kB
  • sloc: cpp: 75,379; f90: 46,460; python: 27,241; ansic: 13,367; fortran: 2,382; makefile: 197; sh: 133
file content (96 lines) | stat: -rwxr-xr-x 1,625 bytes parent folder | download | duplicates (5)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
subroutine sort(n,arr)

  integer n,m,nstack
  real arr(n)
  parameter (m=7,nstack=50)
  integer i,ir,j,jstack,k,l,istack(nstack)
  real a,temp

  jstack=0
  l=1
  ir=n
  n0=n

1 if(ir-l.lt.m) then
     do j=l+1,ir
        a=arr(j)
        do i=j-1,1,-1
           if(arr(i).le.a) goto 2
           arr(i+1)=arr(i)
        enddo
        i=0
2       arr(i+1)=a
     enddo

     if(jstack.eq.0) return

     ir=istack(jstack)
     l=istack(jstack-1)
     jstack=jstack-2

  else
     k=(l+ir)/2
     temp=arr(k)
     arr(k)=arr(l+1)
     arr(l+1)=temp

     if(arr(l+1).gt.arr(ir)) then
        temp=arr(l+1)
        arr(l+1)=arr(ir)
        arr(ir)=temp
     endif

     if(arr(l).gt.arr(ir)) then
        temp=arr(l)
        arr(l)=arr(ir)
        arr(ir)=temp
     endif

     if(arr(l+1).gt.arr(l)) then
        temp=arr(l+1)
        arr(l+1)=arr(l)
        arr(l)=temp
     endif

     i=l+1
     j=ir
     a=arr(l)
3    i=i+1
     if(i.gt.n0) then
        do jj=1,n0
           write(99,3001) jj,arr(jj),i,n,ir
3001       format(i10,e12.3,3i10)
        enddo
        close(99)
        stop 'Bounds error in sort.f90'
     endif
     if(arr(i).lt.a) goto 3

4    j=j-1
     if(arr(j).gt.a) goto 4

     if(j.lt.i) goto 5
     temp=arr(i)
     arr(i)=arr(j)
     arr(j)=temp
     goto 3

5    arr(l)=arr(j)
     arr(j)=a
     jstack=jstack+2
     if(jstack.gt.nstack) stop 'nstack too small in sort'

     if(ir-i+1.ge.j-l) then
        istack(jstack)=ir
        istack(jstack-1)=i
        ir=j-1
     else
        istack(jstack)=j-1
        istack(jstack-1)=l
        l=i
     endif

  endif
  goto 1

end subroutine sort