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