SURFEX v8.1
General documentation of Surfex
qsortr4.F
Go to the documentation of this file.
1 ! Sort character strings
2  SUBROUTINE qsortr4 (N,ORD,A)
3  IMPLICIT INTEGER (A-Z)
4 
5  REAL(KIND=4) A(n)
6  dimension ord(n),poplst(2,20)
7  REAL(KIND=4) X,XX,Z,ZZ,Y
8 
9  ndeep=0
10  u1=n
11  l1=1
12  DO 1 i=1,n
13  1 ord(i)=i
14  2 IF (u1.LE.l1) RETURN
15 
16  3 l=l1
17  u=u1
18  4 p=l
19  q=u
20 
21  x=a(ord(p))
22  z=a(ord(q))
23  IF (x.LE.z) GO TO 5
24  y=x
25  x=z
26  z=y
27  yp=ord(p)
28  ord(p)=ord(q)
29  ord(q)=yp
30  5 IF (u-l.LE.1) GO TO 15
31  xx=x
32  ix=p
33  zz=z
34  iz=q
35 
36  6 p=p+1
37  IF (p.GE.q) GO TO 7
38  x=a(ord(p))
39  IF (x.GE.xx) GO TO 8
40  GO TO 6
41  7 p=q-1
42  GO TO 13
43 
44  8 q=q-1
45  IF (q.LE.p) GO TO 9
46  z=a(ord(q))
47  IF (z.LE.zz) GO TO 10
48  GO TO 8
49  9 q=p
50  p=p-1
51  z=x
52  x=a(ord(p))
53 
54  10 IF (x.LE.z) GO TO 11
55  y=x
56  x=z
57  z=y
58  ip=ord(p)
59  ord(p)=ord(q)
60  ord(q)=ip
61  11 IF (x.LE.xx) GO TO 12
62  xx=x
63  ix=p
64  12 IF (z.GE.zz) GO TO 6
65  zz=z
66  iz=q
67  GO TO 6
68 
69  13 CONTINUE
70  IF (.NOT.(p.NE.ix.AND.x.NE.xx)) GO TO 14
71  ip=ord(p)
72  ord(p)=ord(ix)
73  ord(ix)=ip
74  14 CONTINUE
75  IF (.NOT.(q.NE.iz.AND.z.NE.zz)) GO TO 15
76  iq=ord(q)
77  ord(q)=ord(iz)
78  ord(iz)=iq
79  15 CONTINUE
80  IF (u-q.LE.p-l) GO TO 16
81  l1=l
82  u1=p-1
83  l=q+1
84  GO TO 17
85  16 u1=u
86  l1=q+1
87  u=p-1
88  17 CONTINUE
89  IF (u1.LE.l1) GO TO 18
90 
91  ndeep=ndeep+1
92  poplst(1,ndeep)=u
93  poplst(2,ndeep)=l
94  GO TO 3
95  18 IF (u.GT.l) GO TO 4
96 
97  IF (ndeep.EQ.0) GO TO 2
98  u=poplst(1,ndeep)
99  l=poplst(2,ndeep)
100  ndeep=ndeep-1
101  GO TO 18
102 
103  END SUBROUTINE
subroutine qsortr4(N, ORD, A)
Definition: qsortr4.F:3