Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4,VB6,VBS
Expertise: beginner
Apr 27, 1999

BinarySearch - Fast search in a sorted array

' 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

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)
    
    first = LBound(arr)
    last = lastEl

    ' deduct direction of sorting
    inverseOrder = (arr(first) > arr(last))

    ' 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
Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date