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


Binary search in an array of any type
Returns the index of the matching item, or -1 if the search fails
The arrays *must* be sorted, in ascending or descending
order (the routines finds out the sort direction).
LASTEL is the index of the last item to be searched, and is
useful if the array is only partially filled.

Works with any kind of array, including objects if your are searching
for their default property, and excluding UDTs and fixed-length strings.
String are compared in case-sensitive mode.

You can write faster procedures if you modify the first line
to account for a specific data type, eg.
Function BinarySearchL (arr() As Long, search As Long,
Optional lastEl As Variant) As Long











( binsearch.html )- by Paolo Puglisi - Modifica del 17/12/2023