Path: | src/indexx.f90 |
Last Update: | Tue Feb 22 17:07:20 JST 2005 |
Copyright (c) 2002 Shin-ichi Takehiro. All rights reserved.
表題 INDEXX :" 小さい順番号付け
履歴 1992/12/17 竹広真一 Numerical Recipies より移植
2002/07/06 竹広真一 Fortran90 版
備考 大きさで並び変えるには次のようにすればよい
index = indexx(array) array = array(index) ! 小さい順 array = array(index(size(index):1:-1) ! 大きい順
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