Definition at line 11 of file sort.f90.
◆ qsort_dbl1d()
subroutine sortmodule::qsort::qsort_dbl1d |
( |
integer(i4b), dimension(:), intent(inout) |
indx, |
|
|
real(dp), dimension(:), intent(inout) |
v, |
|
|
logical, intent(in), optional |
reverse |
|
) |
| |
|
private |
Definition at line 155 of file sort.f90.
163 integer(I4B),
dimension(:),
intent(inout) :: indx
164 real(DP),
dimension(:),
intent(inout) :: v
165 logical,
intent(in),
optional :: reverse
168 integer(I4B),
parameter :: nn = 15
169 integer(I4B),
parameter :: nstack = 50
170 integer(I4B) :: nsize
174 integer(I4B) :: jstack
175 integer(I4B) :: ileft
176 integer(I4B) :: iright
177 integer(I4B),
dimension(nstack) :: istack
185 if (
present(reverse))
then
199 if (iright - ileft < nn)
then
200 do j = (ileft + 1), iright
203 do i = (j - 1), ileft, -1
206 indx(i + 1) = indx(i)
211 if (jstack == 0)
return
212 iright = istack(jstack)
213 ileft = istack(jstack - 1)
216 k = (ileft + iright) / 2
217 call rswap(v(k), v(ileft + 1))
218 call iswap(indx(k), indx(ileft + 1))
219 if (v(ileft) > v(iright))
then
220 call rswap(v(ileft), v(iright))
221 call iswap(indx(ileft), indx(iright))
223 if (v(ileft + 1) > v(iright))
then
224 call rswap(v(ileft + 1), v(iright))
225 call iswap(indx(ileft + 1), indx(iright))
227 if (v(ileft) > v(ileft + 1))
then
228 call rswap(v(ileft), v(ileft + 1))
229 call iswap(indx(ileft), indx(ileft + 1))
251 call rswap(v(i), v(j))
252 call iswap(indx(i), indx(j))
255 indx(ileft + 1) = indx(j)
259 if (jstack > nstack)
then
260 write (errmsg,
'(a,3(1x,a))') &
261 'JSTACK > NSTACK IN SortModule::qsort'
262 call store_error(errmsg, terminate=.true.)
264 if ((iright - i + 1) >= (j - 1))
then
265 istack(jstack) = iright
266 istack(jstack - 1) = i
269 istack(jstack) = j - 1
270 istack(jstack - 1) = ileft
280 call rswap(v(i), v(j))
281 call iswap(indx(i), indx(j))
◆ qsort_int1d()
subroutine sortmodule::qsort::qsort_int1d |
( |
integer(i4b), dimension(:), intent(inout) |
indx, |
|
|
integer(i4b), dimension(:), intent(inout) |
v, |
|
|
logical, intent(in), optional |
reverse |
|
) |
| |
|
private |
Definition at line 20 of file sort.f90.
28 integer(I4B),
dimension(:),
intent(inout) :: indx
29 integer(I4B),
dimension(:),
intent(inout) :: v
30 logical,
intent(in),
optional :: reverse
33 integer(I4B),
parameter :: nn = 15
34 integer(I4B),
parameter :: nstack = 50
39 integer(I4B) :: jstack
41 integer(I4B) :: iright
42 integer(I4B),
dimension(nstack) :: istack
50 if (
present(reverse))
then
64 if (iright - ileft < nn)
then
65 do j = (ileft + 1), iright
68 do i = (j - 1), ileft, -1
76 if (jstack == 0)
return
77 iright = istack(jstack)
78 ileft = istack(jstack - 1)
81 k = (ileft + iright) / 2
82 call iswap(v(k), v(ileft + 1))
83 call iswap(indx(k), indx(ileft + 1))
84 if (v(ileft) > v(iright))
then
85 call iswap(v(ileft), v(iright))
86 call iswap(indx(ileft), indx(iright))
88 if (v(ileft + 1) > v(iright))
then
89 call iswap(v(ileft + 1), v(iright))
90 call iswap(indx(ileft + 1), indx(iright))
92 if (v(ileft) > v(ileft + 1))
then
93 call iswap(v(ileft), v(ileft + 1))
94 call iswap(indx(ileft), indx(ileft + 1))
116 call iswap(v(i), v(j))
117 call iswap(indx(i), indx(j))
120 indx(ileft + 1) = indx(j)
124 if (jstack > nstack)
then
125 write (errmsg,
'(a,3(1x,a))') &
126 'JSTACK > NSTACK IN SortModule::qsort'
127 call store_error(errmsg, terminate=.true.)
129 if ((iright - i + 1) >= (j - 1))
then
130 istack(jstack) = iright
131 istack(jstack - 1) = i
134 istack(jstack) = j - 1
135 istack(jstack - 1) = ileft
145 call iswap(v(i), v(j))
146 call iswap(indx(i), indx(j))
The documentation for this interface was generated from the following file:
- /home/runner/work/modflow6/modflow6/src/Utilities/sort.f90