⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsearch.f90

📁 Fortran95的一些有用的源程序
💻 F90
字号:
!
! 折半查找法范例
! By Perng 1997/8/31
program BINARY_SEARCH_DEMO
  implicit none
  integer, parameter :: N=10      ! 类型的大小
  integer :: A(N)=(/2,5,7,9,10,11,13,17,21,23/)
  integer KEY
  integer LOC 
  integer, external :: BINARY_SEARCH

  write(*,"('Source=>',10I3)") A
  write(*,*) 'Input KEY:'
  read (*,*) KEY
  ! 调用顺序查找的子程序
  LOC=BINARY_SEARCH(A,N,KEY)
  if ( LOC/=0 ) then
    write(*,"('A(',I2,' )='I3)") LOC,KEY
  else
    write(*,*) "Not found"
  end if
  
  stop
end program
!
! 折半查找法的子程序
!
integer function BINARY_SEARCH(A,N,KEY)
  implicit none
  integer N,A(N)
  integer KEY    ! 所要寻找的值
  integer L      ! 记录每一个小组的类型起始位置
  integer R      ! 记录每一个小组的类型结束位置
  integer M      ! 记录每一个小组的类型中间位置

  ! 一开始的小组范围就是整个类型
  L=1                     
  R=N
  M=(L+R)/2
  ! 如果KEY值超出范围, 铁定不存在类型中
  if ( (KEY < A(L)) .OR. (KEY > A(R)) ) then
    BINARY_SEARCH = 0
    return
  end if

  do while( L <= R )
    if ( KEY > A(M) ) then
    ! 如果 key > 中间值,那数据就落在上半部
      L=M+1
      M=(L+R)/2
    else if ( KEY < A(M) ) then
    ! 如果 key < 中间值,那数据就落在下半部
      R=M-1
      M=(L+R)/2
    else if ( KEY .EQ. A(M) ) then
	  BINARY_SEARCH = M
	  return
    end if
  end do

  BINARY_SEARCH = 0
  return
end function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -