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
'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
請先 登入 以發表留言。