在FORTRAN中按行排序数组

时间:2016-02-10 19:23:58

标签: arrays sorting fortran

我需要按升序/降序对矩阵的行进行排序。在matlab中我可以很容易地做到如下:

A=[3 1 0;2 1 9;0 4 8]
sortrows(A,1)

因此它将对列“1”中的行进行排序,其他列将相应地跟随。但我需要在FORTRAN中这样做。而且我对FORTRAN不太熟悉。谁能告诉我如何在FORTRAN中做到这一点。谢谢。

1 个答案:

答案 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