Функция _ArrayBinarySearch

         Описание функции


_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 не является одномерным массивом

Примечания

При выполнении бинарного поиска, массив предварительно ДОЛЖЕН быть отсортирован функцией _ArraySort(). Иначе возвращается неопределённый результат.

См. также

_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()")

; поиск существующего вхождения
$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) ; start at index 1 to skip $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