我需要按升序/降序对矩阵的行进行排序。在matlab中我可以很容易地做到如下:
A=[3 1 0;2 1 9;0 4 8]
sortrows(A,1)
因此它将对列“1”中的行进行排序,其他列将相应地跟随。但我需要在FORTRAN中这样做。而且我对FORTRAN不太熟悉。谁能告诉我如何在FORTRAN中做到这一点。谢谢。
答案 0 :(得分:7)
虽然Fortran没有排序内在函数,但如果使用minloc函数查找第一列中的最小元素并使用当前迭代的方式交换相应的行,代码可能会变得更简单,例如:
program main
implicit none
integer :: A(3,3), buf(3)
integer :: nsize, irow, krow
nsize = 3
A( 1, : ) = [ 3, 1, 0 ]
A( 2, : ) = [ 2, 1, 9 ]
A( 3, : ) = [ 0, 4, 8 ]
do irow = 1, nsize
krow = minloc( A( irow:nsize, 1 ), dim=1 ) + irow - 1
buf( : ) = A( irow, : )
A( irow, : ) = A( krow, : )
A( krow, : ) = buf( : )
enddo
end
给出了
A( 1, : ) = 0 4 8
A( 2, : ) = 2 1 9
A( 3, : ) = 3 1 0