COSMOS v7.655  COSMOSv7655
(AirShowerMC)
kqsortc.f
Go to the documentation of this file.
1  SUBROUTINE kqsortc(A, ORD, N)
2 !
3 !==============SORTS THE ARRAY A(I),I=1,2,...,N BY PUTTING THE
4 ! ASCENDING ORDER VECTOR IN ORD. THAT IS ASCENDING ORDERED A
5 ! IS A(ORD(I)),I=1,2,...,N; DESCENDING ORDER A IS A(ORD(N-I+1)),
6 ! I=1,2,...,N . THIS SORT RUNS IN TIME PROPORTIONAL TO N LOG N .
7 !
8 !
9 ! ACM QUICKSORT - ALGORITHM #402 - IMPLEMENTED IN FORTRAN BY
10 ! WILLIAM H. VERITY
11 ! COMPUTATION CENTER
12 ! PENNSYLVANIA STATE UNIVERSITY
13 ! UNIVERSITY PARK, PA. 16802
14 !
15  IMPLICIT INTEGER (A-Z)
16 !
17  dimension ord(n),poplst(2,20)
18  INTEGER X,XX,Z,ZZ,Y
19  CHARACTER *(*) A(n)
20 !
21  ndeep=0
22  u1=n
23  l1=1
24  DO 1 i=1,n
25  1 ord(i)=i
26  2 IF (u1.GT.l1) GO TO 3
27  RETURN
28 !
29  3 l=l1
30  u=u1
31 !
32 ! PART
33 !
34  4 p=l
35  q=u
36  x=ord(p)
37  z=ord(q)
38  IF (a(x).LE.a(z)) GO TO 5
39  y=x
40  x=z
41  z=y
42  yp=ord(p)
43  ord(p)=ord(q)
44  ord(q)=yp
45  5 IF (u-l.LE.1) GO TO 15
46  xx=x
47  ix=p
48  zz=z
49  iz=q
50 !
51 ! LEFT
52 !
53  6 p=p+1
54  IF (p.GE.q) GO TO 7
55  x=ord(p)
56  IF (a(x).GE.a(xx)) GO TO 8
57  GO TO 6
58  7 p=q-1
59  GO TO 13
60 !
61 ! RIGHT
62 !
63  8 q=q-1
64  IF (q.LE.p) GO TO 9
65  z=ord(q)
66  IF (a(z).LE.a(zz)) GO TO 10
67  GO TO 8
68  9 q=p
69  p=p-1
70  z=x
71  x=ord(p)
72 !
73 ! DIST
74 !
75  10 IF (a(x).LE.a(z)) GO TO 11
76  y=x
77  x=z
78  z=y
79  ip=ord(p)
80  ord(p)=ord(q)
81  ord(q)=ip
82  11 IF (a(x).LE.a(xx)) GO TO 12
83  xx=x
84  ix=p
85  12 IF (a(z).GE.a(zz)) GO TO 6
86  zz=z
87  iz=q
88  GO TO 6
89 !
90 ! OUT
91 !
92  13 CONTINUE
93  IF (.NOT.(p.NE.ix.AND.a(x).NE.a(xx))) GO TO 14
94  ip=ord(p)
95  ord(p)=ord(ix)
96  ord(ix)=ip
97  14 CONTINUE
98  IF (.NOT.(q.NE.iz.AND.a(z).NE.a(zz))) GO TO 15
99  iq=ord(q)
100  ord(q)=ord(iz)
101  ord(iz)=iq
102  15 CONTINUE
103  IF (u-q.LE.p-l) GO TO 16
104  l1=l
105  u1=p-1
106  l=q+1
107  GO TO 17
108  16 u1=u
109  l1=q+1
110  u=p-1
111  17 CONTINUE
112  IF (u1.LE.l1) GO TO 18
113 !
114 ! START RECURSIVE CALL
115 !
116  ndeep=ndeep+1
117  poplst(1,ndeep)=u
118  poplst(2,ndeep)=l
119  GO TO 3
120  18 IF (u.GT.l) GO TO 4
121 !
122 ! POP BACK UP IN THE RECURSION LIST
123 !
124  IF (ndeep.EQ.0) GO TO 2
125  u=poplst(1,ndeep)
126  l=poplst(2,ndeep)
127  ndeep=ndeep-1
128  GO TO 18
129 !
130 ! END SORT
131 ! END QSORT
132 !
133  END
nodes i
subroutine kqsortc(A, ORD, N)
Definition: kqsortc.f:2
********************block data cblkHeavy ********************integer j data *HeavyG2symbol p
Definition: cblkHeavy.h:7
integer n
Definition: Zcinippxc.h:1