使用二进制搜索算法搜索一个一维数组.
#Include <Array.au3>
_ArrayBinarySearch(Const ByRef $avArray, $vValue [, $iStart = 0 [, $iEnd = 0]])
$avArray | 要搜索的数组 |
$vValue | 要进行搜索的值 |
$iStart | [可选参数] 开始搜索数组的索引位置 |
$iEnd | [可选参数] 结束搜索数组的索引位置 |
成功: | 返回搜索到的值所在的索引 |
失败: | 返回 -1, 并设置 @error |
@error: | 1 - $avArray 不是一个数组 |
2 - $vValue 在数组的 最小/最大值 外面. | |
3 - $vValue 未在数组中找到. | |
4 - $iStart 比 $iEnd 要大. | |
5 - $avArray 不是一个一维数组. |
#include <Array.au3>
;===============================================================================
; 例子 1 (使用一个手动定义的数组)
;===============================================================================
Local $avArray[10]
$avArray[0] = "JPM"
$avArray[1] = "Holger"
$avArray[2] = "Jon"
$avArray[3] = "Larry"
$avArray[4] = "Jeremy"
$avArray[5] = "Valik"
$avArray[6] = "Cyberslug"
$avArray[7] = "Nutster"
$avArray[8] = "JdeB"
$avArray[9] = "Tylo"
; 对数组进行排序
_ArraySort($avArray)
; 显示排序后的数组
_ArrayDisplay($avArray, "$avArray 排序后 _ArraySort()")
; 查找存在的项目
Local $iKeyIndex = _ArrayBinarySearch($avArray, "Jon")
If Not @error Then
MsgBox(4096,'项目找到了',' 索引: ' & $iKeyIndex)
Else
MsgBox(4096,'项目未找到',' 错误: ' & @error)
EndIf
; 查找不存在的项目
$iKeyIndex = _ArrayBinarySearch($avArray, "Unknown")
If Not @error Then
MsgBox(4096,'项目找到了',' 索引: ' & $iKeyIndex)
Else
MsgBox(4096,'项目未找到',' 错误: ' & @error)
EndIf
;===============================================================================
; 例子 2 (使用一个 StringSplit() 函数返回的数组)
;===============================================================================
$avArray = StringSplit("a,b,d,c,e,f,g,h,i", ",")
; 对数组排序
_ArraySort($avArray, 0, 1) ; 从索引 1 开始,跳过 $avArray[0]
; 显示排序的数组
_ArrayDisplay($avArray, "$avArray 排序后 _ArraySort()")
; 开始于索引 1 跳过 $avArray[0]
$iKeyIndex = _ArrayBinarySearch($avArray, "c", 1)
If Not @error Then
MsgBox(4096,'项目找到了',' 索引: ' & $iKeyIndex)
Else
MsgBox(4096,'项目未找到',' 错误: ' & @error)
EndIf