#include "implicit_f.inc"
Go to the source code of this file.
|
| recursive subroutine | quicksort (a, idx, first, last) |
| recursive subroutine | quicksort_i (a, first, last) |
| recursive subroutine | quicksort_i2 (a, idx, first, last) |
| recursive subroutine | quicksort_integer_2arrays (a, b, first, last) |
| recursive subroutine | quicksort_integer_3arrays (a, b, c, first, last) |
◆ quicksort()
| recursive subroutine quicksort |
( |
dimension(*), intent(inout) | a, |
|
|
integer, dimension(*), intent(inout) | idx, |
|
|
integer, intent(in) | first, |
|
|
integer, intent(in) | last ) |
Definition at line 33 of file quicksort.F.
34
35
36
37#include "implicit_f.inc"
38
39
40
42 INTEGER, INTENT(IN) :: FIRST, LAST
43 INTEGER, INTENT(INOUT) :: IDX(*)
44
45
46
48 INTEGER :: I, J, I1
49
50
51
52 IF(first>last)RETURN
53
54
55
56 x = a( (first + last) / 2 )
57 i = first
58 j = last
59 DO
60 DO WHILE (a(i) < x)
61 i = i + 1
62 ENDDO
63 DO WHILE(x < a(j))
64 j = j - 1
65 ENDDO
66 IF (i >= j) EXIT
67 t = a(i)
68 a(i) = a(j)
69 a(j) = t
70 i1 = idx(i)
71 idx(i) = idx(j)
72 idx(j) = i1
73 i = i + 1
74 j = j - 1
75 ENDDO
76 IF (first < i - 1)
CALL quicksort(a, idx, first, i - 1)
77 IF (j + 1 < last)
CALL quicksort(a, idx, j + 1, last)
recursive subroutine quicksort(a, idx, first, last)
◆ quicksort_i()
| recursive subroutine quicksort_i |
( |
integer, dimension(*), intent(inout) | a, |
|
|
integer, intent(in) | first, |
|
|
integer, intent(in) | last ) |
Definition at line 91 of file quicksort.F.
92
93
94
95#include "implicit_f.inc"
96
97
98
99 INTEGER, INTENT(INOUT) :: A(*)
100 INTEGER, INTENT(IN) :: FIRST, LAST
101
102
103
104 INTEGER X, T
105 INTEGER :: I, J
106
107
108
109 IF(first>last)RETURN
110
111
112
113 x = a( (first + last) / 2 )
114 i = first
115 j = last
116 DO
117 DO WHILE (a(i) < x)
118 i = i + 1
119 ENDDO
120 DO WHILE(x < a(j))
121 j = j - 1
122 ENDDO
123 IF (i >= j) EXIT
124 t = a(i)
125 a(i) = a(j)
126 a(j) = t
127 i = i + 1
128 j = j - 1
129 ENDDO
130 IF (first < i - 1)
CALL quicksort_i(a, first, i - 1)
recursive subroutine quicksort_i(a, first, last)
◆ quicksort_i2()
| recursive subroutine quicksort_i2 |
( |
integer, dimension(*), intent(inout) | a, |
|
|
integer, dimension(*), intent(inout) | idx, |
|
|
integer, intent(in) | first, |
|
|
integer, intent(in) | last ) |
Definition at line 152 of file quicksort.F.
153
154
155
156#include "implicit_f.inc"
157
158
159
160 INTEGER, INTENT(INOUT) :: A(*)
161 INTEGER, INTENT(IN) :: FIRST, LAST
162 INTEGER, INTENT(INOUT) :: IDX(*)
163
164
165
166 INTEGER :: X, T
167 INTEGER :: I, J, I1
168
169
170
171 IF(first>last)RETURN
172
173
174
175 x = a( (first + last) / 2 )
176 i = first
177 j = last
178 DO
179 DO WHILE (a(i) < x)
180 i = i + 1
181 ENDDO
182 DO WHILE(x < a(j))
183 j = j - 1
184 ENDDO
185 IF (i >= j) EXIT
186 t = a(i)
187 a(i) = a(j)
188 a(j) = t
189 i1 = idx(i)
190 idx(i) = idx(j)
191 idx(j) = i1
192 i = i + 1
193 j = j - 1
194 ENDDO
195 IF (first < i - 1)
CALL quicksort_i2(a, idx, first, i - 1)
196 IF (j + 1 < last)
CALL quicksort_i2(a, idx, j + 1, last)
recursive subroutine quicksort_i2(a, idx, first, last)
◆ quicksort_integer_2arrays()
| recursive subroutine quicksort_integer_2arrays |
( |
integer, dimension(*), intent(inout) | a, |
|
|
integer, dimension(*), intent(inout) | b, |
|
|
integer, intent(in) | first, |
|
|
integer, intent(in) | last ) |
Definition at line 205 of file quicksort.F.
206
207
208
209
210#include "implicit_f.inc"
211
212
213
214 INTEGER, INTENT(INOUT) :: A(*),B(*)
215 INTEGER, INTENT(IN) :: FIRST, LAST
216
217
218
219 INTEGER X, T
220 INTEGER :: I, J
221
222
223
224 IF(first>last)RETURN
225
226
227
228 x = a( (first + last) / 2 )
229 i = first
230 j = last
231 DO
232 DO WHILE (a(i) < x)
233 i = i + 1
234 ENDDO
235 DO WHILE(x < a(j))
236 j = j - 1
237 ENDDO
238 IF (i >= j) EXIT
239 t = a(i)
240 a(i) = a(j)
241 a(j) = t
242
243 t = b(i)
244 b(i) = b(j)
245 b(j) = t
246
247 i = i + 1
248 j = j - 1
249 ENDDO
recursive subroutine quicksort_integer_2arrays(a, b, first, last)
◆ quicksort_integer_3arrays()
| recursive subroutine quicksort_integer_3arrays |
( |
integer, dimension(*), intent(inout) | a, |
|
|
integer, dimension(*), intent(inout) | b, |
|
|
integer, dimension(*), intent(inout) | c, |
|
|
integer, intent(in) | first, |
|
|
integer, intent(in) | last ) |
Definition at line 260 of file quicksort.F.
261
262
263
264
265#include "implicit_f.inc"
266
267
268
269 INTEGER, INTENT(INOUT) :: A(*),B(*),C(*)
270 INTEGER, INTENT(IN) :: FIRST, LAST
271
272
273
274 INTEGER X, T
275 INTEGER :: I, J
276
277
278
279 IF(first>last)RETURN
280
281
282
283 x = a( (first + last) / 2 )
284 i = first
285 j = last
286 DO
287 DO WHILE (a(i) < x)
288 i = i + 1
289 ENDDO
290 DO WHILE(x < a(j))
291 j = j - 1
292 ENDDO
293 IF (i >= j) EXIT
294 t = a(i)
295 a(i) = a(j)
296 a(j) = t
297
298 t = b(i)
299 b(i) = b(j)
300 b(j) = t
301
302 t = c(i)
303 c(i) = c(j)
304 c(j) = t
305
306 i = i + 1
307 j = j - 1
308 ENDDO
recursive subroutine quicksort_integer_3arrays(a, b, c, first, last)