| Path: | libsrc/eigmatrix/indexx.f90 |
| Last Update: | Mon Aug 19 17:49:21 +0900 2013 |
| Authors: | Shin-ichi Takehiro, Youhei SASAKI |
| Version: | $Id: indexx.f90 590 2013-08-19 08:48:21Z uwabami $ |
このファイルでは与えられた配列を値の小さい順に sort するための関数で ある indexx を提供する.
| indexx : | 与えられた配列を値の小さい順に sort する関数. 値の大きい順に sort する場合は, 例えば以下の様にすると良いだろう |
index = indexx(array)
array = array(index) ! 小さい順(default)
array = array(index(size(index):1:-1) ! 大きい順
| Function : | |
| indexx : | integer, dimension(size(arrin)) |
| arrin : | real(8), dimension(:), intent(in) |
function indexx(arrin)
implicit none
real(8), dimension(:), intent(in) :: arrin
integer, dimension(size(arrin)) :: indexx
integer :: ir, l, i, j, indxt
real(8) :: Q
integer :: n
n = size(arrin)
indexx = (/(j, j=1,n)/)
l = n/2 + 1
ir = n
10 continue
if( l .gt. 1 )then
l = l - 1
indxt = indexx(l)
q = arrin(indxt)
else
indxt = indexx(ir)
q = arrin(indxt)
indexx(ir) = indexx(1)
ir = ir - 1
if( ir .eq. 1 )then
indexx(1) = indxt
return
endif
endif
i = l
j = l + l
20 if( j .le. ir )then
if( j .lt. ir )then
if( arrin( indexx(j) ) .lt. arrin( indexx(j+1) ) ) j = j + 1
endif
if( q .lt. arrin( indexx(j) ) )then
indexx( i ) = indexx( j )
i = J
j = j + j
else
j = ir + 1
endif
go to 20
endif
indexx( i ) = indxt
go to 10
end function indexx