BinSearch



Function BinarySearch(arr As Variant, search As Variant, _
Optional lastEl As Variant) As Long
Dim index As Long
Dim first As Long
Dim last As Long
Dim middle As Long
Dim inverseOrder As Boolean

' account for optional arguments

If IsMissing(lastEl) Then lastEl = UBound(arr)
' deduct direction of sorting

inverseOrder = (arr(first) > arr(last))

first = LBound(arr)
last = lastEl
' assume searches failed

BinarySearch = first - 1

Do
middle = (first + last) \ 2
If arr(middle) = search Then
BinarySearch = middle
Exit Do
ElseIf ((arr(middle) < search) Xor inverseOrder) Then
first = middle + 1
Else
last = middle - 1
End If
Loop Until first > last
End Function



(binsearch.html)- by Paolo Puglisi - Modifica del 25/3/2019