首页 > 代码 > 行业代码 > 正文

代码

阅读排行

Fortran 的堆排序(HeapSort)简单实现
2014-01-20 10:58:15   来源:Fcode研讨团队   评论:0 点击:

本文介绍了Fortran堆排序(HeapSort)的简单实现方法,本文涉及内容完全符合语法规范,可直接使用。

简单的 HeapSort 排序实现...

Program www_fcode_cn
  Implicit None
  Real , External :: comp_f !// comp_f 用来对比两个数,以决定升序和降序排列
  Real :: a( 8 ) = (/3.,1.,7.,9.,5.,8.,3.,4./)
  Call HeapSort( a , comp_f )
  write(*,*)a
 
Contains !// HeapSort 函数Contains 在Program 下,可以避免传递数组大小参数。也可以包含在Module 中

  Subroutine HeapSort( stD , comp_f )
    Real , Intent( INOUT ) :: stD( : )
    Real , External :: comp_f
    Integer i,ir,j,l,n
    Real :: stTemp
    n = size( stD )
    If ( n < 2 ) Return
    l = n / 2 + 1
    ir = n
    Do while( .TRUE. )
      If( l > 1 ) then
        l = l - 1
        stTemp = stD( l )
      Else
        stTemp = stD( ir )
        stD( ir ) = stD( 1 )
        ir = ir - 1
        If( ir == 1 ) then
          stD( 1 ) = stTemp
          return
        End If
      End If
      i = l
      j = l + l
      Do while( j<=ir )
        If( ( j < ir ) ) then
          If ( comp_f( stD(j) , std(j+1) ) > 0.0 ) then
            j = j+1
          End If
        EndIf
        If( comp_f( stTemp , stD(j) ) > 0.0 )then
          stD(i) = stD( j )
          i = j
          j = j + j
        Else
          j = ir + 1
        End If
      EndDo
      stD( i ) = stTemp
    End Do
  End Subroutine HeapSort

End Program www_fcode_cn

Real Function comp_f( st1 , st2 )
  Real , Parameter :: ORDER = 1.0 !// 降序,-1.0为升序
  Real , Intent( IN ) :: st1 , st2
  comp_f = ORDER*(st1 - st2)
End Function comp_f

相关热词搜索:堆排序 HeapSort

上一篇:第一页
下一篇:差分进化算法

分享到: 收藏