Public Function BinarySearch(aintSrc() As Integer, intSrc As Integer) As Integer  '用到 Null 故宣告成 Variant
'Purpose:二分搜尋法
If intSrc < aintSrc(LBound(aintSrc)) Or intSrc > aintSrc(UBound(aintSrc)) Then '判斷是否小於第一筆或是大於最後一筆
BinarySearch = Null
  Exit Function
End If
Dim intTotalCur As Integer '目前筆數
Dim intLocation As Integer '中間筆位置
intTotalCur = UBound(aintSrc) + 1
intTotalCur = CInt(intTotalCur / 2 + 0.5)  '總筆數之半=目前總筆數/2 + 0.5
intLocation = intTotalCur - 1        '陣列1/2處註標值=總筆數之半 - 1
Do Until intSrc = aintSrc(intLocation) '判斷資料是否等於陣列中央資料
If intSrc < aintSrc(intLocation) Then
    intTotalCur = CInt((intTotalCur - 1) / 2 + 0.5) 'intTotalCur - 1 =>減掉已比對過的中央筆資料
    intLocation = intTotalCur - 1
  Else
    intTotalCur = CInt((intTotalCur - 1) / 2 + 0.5) 'intTotalCur - 1 =>減掉已比對過的中央筆資料
    intLocation = (UBound(aintSrc) + 1) - intTotalCur
  End If
Loop
BinarySearch = intLocation
End Function
文章標籤
全站熱搜
創作者介紹
創作者 vbqa 的頭像
vbqa

小吳 VBQA 程式設計討論

vbqa 發表在 痞客邦 留言(2) 人氣(78)