Subroutine to sort a vector of reals and a vector of integers, according a vector of integers
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=I4), | intent(in) | :: | g | |||
integer(kind=I4), | intent(in) | :: | d | |||
integer(kind=I4), | intent(inout), | dimension(:) | :: | itabref | ||
integer(kind=I4), | intent(inout), | dimension(:) | :: | itab1 | ||
real(kind=R8), | intent(inout), | dimension(:) | :: | rtab2 |
recursive subroutine sort_int_1int_1real(g, d, itabref, itab1, rtab2)
implicit none
integer(kind=I4), intent(in) :: g, d
integer(kind=I4), dimension(:), intent(inout) :: itabref
integer(kind=I4), dimension(:), intent(inout) :: itab1
real(kind=R8), dimension(:), intent(inout) :: rtab2
integer(kind=I4) :: i, j, mil, cle, itmp
real(kind=R8) :: rtmp
i = g
j = d
mil = (g+d)/2
cle = itabref(mil)
if (g>=d) return
do while (i<=j)
do while (itabref(i)<cle)
i = i + 1
enddo
do while (itabref(j)>cle)
j = j - 1
enddo
if (i<=j) then
! échange des éléments du tableau
itmp = itabref(i)
itabref(i) = itabref(j)
itabref(j) = itmp
! échange des éléments du vecteur 2
itmp = itab1(i)
itab1(i) = itab1(j)
itab1(j) = itmp
! échange des éléments du vecteur 3
rtmp = rtab2(i)
rtab2(i) = rtab2(j)
rtab2(j) = rtmp
i = i + 1
j = j - 1
endif
enddo
if (g<j) call sort_int_1int_1real(g, j, itabref, itab1, rtab2)
if (d>i) call sort_int_1int_1real(i, d, itabref, itab1, rtab2)
return
endsubroutine sort_int_1int_1real