'Binary search an item in a certain table's certain column
'Writer Markin.Q.Li
'Create Date 2013-4-24
'Return RowIndex
'min The min row index
'max The max row index
'Item Config node name
'Table The table object on the form
'Col_index The column index we search in
'Example BinarySearch(0, 100, ItemName, Table, 1)
Function BinarySearch(min, max, Item, Table, Col_index)
Dim MidData
Dim MaxMidData
Dim LowMidData
If((min + max)/2 =Fix((min + max)/2)) Then
MidData = (min + max)/2
'msgbox("Min: " & min & " Max: " & max & " Mid: " & MidData & "---" & Table.GetCellData(MidData, Col_index)&"---" & Item)
If Ucase(RTrim(Item)) = Ucase(RTrim(Table.GetCellData(MidData, Col_index))) Then
BinarySearch = MidData
Exit Function
ElseIf Ucase(RTrim(Item)) > Ucase(RTrim(Table.GetCellData(MidData, Col_index))) Then
min = MidData
BinarySearch = BinarySearch(min, max, Item, Table, Col_index)
Elseif Ucase(RTrim(Item)) < Ucase(RTrim(Table.GetCellData(MidData, Col_index))) Then
max = MidData
BinarySearch = BinarySearch(min, max, Item, Table, Col_index)
Else
BinarySearch = -1
Exit Function
End If
Else
LowMidData = Fix((min + max)/2)
MaxMidData = Fix((min + max)/2) + 1
'msgbox("Min: " & min & " Max: " & max & " Mid: " & LowMidData & "--" & MaxMidData & "---"&Table.GetCellData(LowMidData, Col_index)& "--" &Table.GetCellData(MaxMidData, Col_index)&"---"&Item)
If Ucase(RTrim(Item)) > Ucase(RTrim(Table.GetCellData(MaxMidData, Col_index))) Then
min = MaxMidData
BinarySearch = BinarySearch(min, max, Item, Table, Col_index)
Elseif Ucase(RTrim(Item)) < Ucase(RTrim(Table.GetCellData(LowMidData, Col_index))) Then
max = LowMidData
BinarySearch = BinarySearch(min, max, Item, Table, Col_index)
Elseif Ucase(RTrim(Item)) = Ucase(RTrim(Table.GetCellData(LowMidData, Col_index))) Then
BinarySearch = LowMidData
Exit Function
Elseif Ucase(RTrim(Item)) = Ucase(RTrim(Table.GetCellData(MaxMidData, Col_index))) Then
BinarySearch = MaxMidData
Exit Function
Else
BinarySearch = -1
Exit Function
End If
End If
End Function
Vbscript在DataGridView中折半查找某一行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.