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
文章標籤
全站熱搜

你的思考羅輯有問題 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 '中間筆位置 Dim intBegCur As Integer Dim intEndCur As Integer 'intTotalCur = UBound(aintSrc) + 1 ' 'intTotalCur = CInt(intTotalCur / 2 + 0.5) '總筆數之半=目前總筆數/2 + 0.5 intBegCur = LBound(aintSrc) intEndCur = UBound(aintSrc) intLocation = intBegCur + Int((intEndCur - intBegCur + 1) / 2) '陣列1/2處註標值=總筆數之半 - 1 Do While intSrc <> aintSrc(intLocation) And intEndCur >= intBegCur '判斷資料是否等於陣列中央資料 If intSrc < aintSrc(intLocation) Then intEndCur = intLocation - 1 ' =>減掉已比對過的中央筆資料 intLocation = intBegCur + Int((intEndCur - intBegCur + 1) / 2) Else intBegCur = intLocation + 1 ' =>減掉已比對過的中央筆資料 intLocation = intBegCur + Int((intEndCur - intBegCur) / 2) End If Loop If intEndCur >= intBegCur Then BinarySearch = intLocation Else BinarySearch = -1 End If End Function
原來如此,thx