函数参考


_ArrayBinarySearch

使用二进制搜索算法搜索一个一维数组.

#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 不是一个一维数组.

注意/说明

当对一个数组项目进行二进制搜索运算时, 搜索前必须对数组内容进行排序.
否则将会返回不可预知的结果.

相关

_ArrayFindAll, _ArraySearch

示例/演示


#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