]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1996/02/15 17:49:48 mclareni | |
6 | * Kernlib | |
7 | * | |
8 | * | |
9 | #include "kerngen/pilot.h" | |
10 | SUBROUTINE INTSOR(A,N) | |
11 | C | |
12 | C CERN PROGLIB# M103 INTSOR .VERSION KERNFOR 3.15 820113 | |
13 | C ORIG. 29/04/78 | |
14 | C | |
15 | C SORT THE ONE-DIMENSIONAL INTEGER ARRAY A(1),...,A(N) BY | |
16 | C INCREASING VALUES | |
17 | C | |
18 | C- PROGRAM M103 TAKEN FROM CERN PROGRAM LIBRARY, 29-APR-78 | |
19 | C | |
20 | INTEGER A(N),X,W | |
21 | COMMON /SLATE/ LT(20),RT(20) | |
22 | INTEGER R,RT | |
23 | C | |
24 | LEVEL=1 | |
25 | LT(1)=1 | |
26 | RT(1)=N | |
27 | 10 L=LT(LEVEL) | |
28 | R=RT(LEVEL) | |
29 | LEVEL=LEVEL-1 | |
30 | 20 IF(R.GT.L) GO TO 200 | |
31 | IF(LEVEL) 50,50,10 | |
32 | C | |
33 | C SUBDIVIDE THE INTERVAL L,R | |
34 | C L : LOWER LIMIT OF THE INTERVAL (INPUT) | |
35 | C R : UPPER LIMIT OF THE INTERVAL (INPUT) | |
36 | C J : UPPER LIMIT OF LOWER SUB-INTERVAL (OUTPUT) | |
37 | C I : LOWER LIMIT OF UPPER SUB-INTERVAL (OUTPUT) | |
38 | C | |
39 | 200 I=L | |
40 | J=R | |
41 | M=(L+R)/2 | |
42 | X=A(M) | |
43 | 220 IF(A(I).GE.X) GO TO 230 | |
44 | I=I+1 | |
45 | GO TO 220 | |
46 | 230 IF(A(J).LE.X) GO TO 231 | |
47 | J=J-1 | |
48 | GO TO 230 | |
49 | C | |
50 | 231 IF(I.GT.J) GO TO 232 | |
51 | W=A(I) | |
52 | A(I)=A(J) | |
53 | A(J)=W | |
54 | I=I+1 | |
55 | J=J-1 | |
56 | IF(I.LE.J) GO TO 220 | |
57 | C | |
58 | 232 LEVEL=LEVEL+1 | |
59 | IF((R-I).GE.(J-L)) GO TO 30 | |
60 | LT(LEVEL)=L | |
61 | RT(LEVEL)=J | |
62 | L=I | |
63 | GO TO 20 | |
64 | 30 LT(LEVEL)=I | |
65 | RT(LEVEL)=R | |
66 | R=J | |
67 | GO TO 20 | |
68 | 50 RETURN | |
69 | END |