]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/kernlib/kerngen/tcgen/sortx.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / kernlib / kerngen / tcgen / sortx.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/02/15 17:49:50 mclareni
6* Kernlib
7*
8*
9#include "kerngen/pilot.h"
10#if !defined(CERNLIB_TCGEN)
11 SUBROUTINE SORTX(MX,NC,NR,NCS,NK)
12C
13C CERN PROGLIB# M106 SORTX .VERSION KERNFOR 1.0 661115
14C ORIG. 15/11/66 CL
15C
16 DIMENSION MX(2),NK(2,2)
17 COMMON/SLATE/I,I1,I2,I3,IC,IR,ICMX,N1,N2,N3,N4,N5,NKI,NKI1,NKI2,
18 1 NCSORT,NRM1,INK,JNK,NHELP,NKIP1,XQX(19)
19C
20 NCSORT=IABS(NCS)
21 IF(NR.LE.1.OR.NCSORT.GT.NC.OR.NCSORT.LE.0) GO TO 1000
22 NK(1,1)=NCSORT
23 DO 1 I=2,NR
24 1 NK(1,I)=NK(1,I-1)+NC
25 I3=0
26 NRM1=NR-1
27 INK=1
28C
29C-- MAIN PROGRAM (PASSES N1,N2, AND N3 TO MERGE)
30C
31 100 JNK=3-INK
32 N3=0
33C
34 101 N1=N3+1
35 IF(N1.GT.NRM1) GO TO 113
36 DO 103 I=N1,NRM1
37 NKI=NK(INK,I)
38 NKIP1=NK(INK,I+1)
39 IF (MX(NKIP1).LT.MX(NKI)) GO TO 104
40 103 CONTINUE
41 113 N3=NR
42 N4=N1
43 N5=NR
44 GO TO 206
45C
46 104 N2=I+1
47 IF (N2.GT.NRM1) GO TO 116
48 DO 106 I=N2,NRM1
49 NKI=NK(INK,I)
50 NKIP1=NK(INK,I+1)
51 IF(MX(NKIP1).LT.MX(NKI)) GO TO 107
52 106 CONTINUE
53 116 I=NR
54C
55 107 N3=I
56C
57C-- MERGE SEQUENCE (STRINGS N1-(N2-1), N2-N3)
58C
59 I1=N1
60 I2=N2
61 DO 203 I3=N1,N3
62 NKI1=NK(INK,I1)
63 NKI2=NK(INK,I2)
64 IF(MX(NKI2).LT.MX(NKI1)) GO TO 202
65 NK(JNK,I3)=NKI1
66 I1=I1+1
67 IF(N2-I1) 204,204,203
68 202 NK(JNK,I3)=NKI2
69 I2=I2+1
70 IF ((N3+1).LE.I2) GO TO 205
71 203 CONTINUE
72 GO TO 208
73C
74 204 N4=I2
75 N5=N3
76 GO TO 206
77C
78 205 N4=I1
79 N5=N2-1
80 206 DO 207 I=N4,N5
81 I3=I3+1
82 207 NK(JNK,I3)=NK(INK,I)
83 IF(NR.GT.N3) GO TO 101
84 208 INK=JNK
85 IF (N1.NE.1) GO TO 100
86C
87C-- FINAL PERMUTATION PROGRAM
88C
89 JNK=3-INK
90 DO 302 IC=1,NC
91 DO 301 IR=1,NR
92 ICMX=NK(INK,IR)+IC-NCSORT
93 301 NK(JNK,IR)=MX(ICMX)
94 ICMX=IC
95 DO 302 IR=1,NR
96 IF (NCS.GE.0) GO TO 303
97 NHELP=NR-IR+1
98 MX(ICMX)=NK(JNK,NHELP)
99 GO TO 302
100 303 MX(ICMX)=NK(JNK,IR)
101 302 ICMX=ICMX+NC
102 1000 RETURN
103 END
104#endif