VisualBasic6
Public Function HeapSearch(SearchValue as Long, Optional StartPosition As Long = 0) As Long
HeapSearch = -1
Dim i As Long
Dim lngMax As Long
Dim lngMin As Long
Dim lngP As Long
lngMax = UBound(varArray)
lngMin = StartPosition
lngP = (lngMax - lngMin) \ 2
Do
Select Case varArray(lngP)
Case SearchValue
For i = lngP - 1 To lngMin Step -1
If varArray(i) <> SearchValue Then
HeapSearch = i + 1
Exit For
End If
Next
If i < lngMin Then
HeapSearch = lngMin
End If
Exit Do
Case Is < SearchValue
lngMin = lngP
lngP = lngP + ((lngMax - lngP) \ 2)
Case Is > SearchValue
lngMax = lngP
lngP = lngP - ((lngP - lngMin) \ 2)
End Select
If lngMax - lngMin <= 1 Then
For i = lngMin To lngMax Step 1
If varArray(i) = SearchValue Then
HeapSearch = i
Exit For
End If
Next
Exit Do
End If
Loop
End Function