root / synthbench / euroben-dm / mod2i / .svn / text-base / dqsort.f.svn-base @ 0:839f52ef7657
History | View | Annotate | Download (1.6 kB)
1 |
Subroutine dqsort( a, n, nl, nu ) ! 8-byte Real sort. |
---|---|
2 |
! -------------------------------------------------------------------- |
3 |
Use numerics |
4 |
Implicit None |
5 |
|
6 |
Integer, Intent( In ) :: n, nl, nu |
7 |
Real(l_), Intent( Inout ) :: a(n) |
8 |
|
9 |
Integer :: iu(16), il(16) |
10 |
Integer :: i, ii, ij, j, jj, k, l, m |
11 |
Real(l_) :: t, tt |
12 |
! -------------------------------------------------------------------- |
13 |
ii = nl |
14 |
m = 1 |
15 |
i = ii |
16 |
j = nu |
17 |
10 If ( i >= j ) Go To 80 |
18 |
20 k = i |
19 |
ij = (j+i)/2 |
20 |
t = a(ij) |
21 |
If ( a(i) <= t ) Go To 30 |
22 |
a(ij) = a(i) |
23 |
a(i) = t |
24 |
t = a(ij) |
25 |
30 l = j |
26 |
If ( a(j) >= t ) Go To 50 |
27 |
a(ij) = a(j) |
28 |
a(j) = t |
29 |
t = a(ij) |
30 |
If ( a(i) <= t ) Go To 50 |
31 |
a(ij) = a(i) |
32 |
a(i) = t |
33 |
t = a(ij) |
34 |
Go To 50 |
35 |
40 a(l) = a(k) |
36 |
a(k) = tt |
37 |
50 l = l - 1 |
38 |
If ( a(l) > t ) Go To 50 |
39 |
tt = a(l) |
40 |
60 k = k + 1 |
41 |
If ( a(k) < t ) Go To 60 |
42 |
If ( k <= l) Go To 40 |
43 |
If ( l - i <= j - k ) Go To 70 |
44 |
il(m) = i |
45 |
iu(m) = l |
46 |
i = k |
47 |
m = m + 1 |
48 |
Go To 90 |
49 |
70 il(m) = k |
50 |
iu(m) = j |
51 |
j = l |
52 |
m = m + 1 |
53 |
Go To 90 |
54 |
80 m = m - 1 |
55 |
If ( m == 0 ) Return |
56 |
i = il(m) |
57 |
j = iu(m) |
58 |
90 If ( j-i >= 11 ) Go To 20 |
59 |
If ( i == ii ) Go To 10 |
60 |
i = i - 1 |
61 |
100 i = i + 1 |
62 |
If ( i == j ) Go To 80 |
63 |
t = a(i+1) |
64 |
If ( a(i) <= t) Go To 100 |
65 |
k = i |
66 |
110 a(k+1) = a(k) |
67 |
k = k - 1 |
68 |
If ( t < a(k) ) Go To 110 |
69 |
a(k+1) = t |
70 |
Go To 100 |
71 |
! -------------------------------------------------------------------- |
72 |
End Subroutine dqsort |