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