| int ArrayBsearch( |
double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND) |
Возвращает индекс первого найденного элемента в первом измерении массива.
Если элемент с указанным значением в массиве отсутствует, функция вернет индекс ближайшего меньшего по значению из элементов, между которыми расположено искомое значение.
Функция не может применяться к массивами строк и таймсериям (исключение составляет таймсерия времени открытия бара).
Замечание: двоичный поиск обрабатывает только сортированные массивы.
Для сортировки числового массива используется функция ArraySort().
Параметры:
| array[] |
- |
Числовой массив для поиска. |
| value |
- |
Значение для поиска. |
| count |
- |
Количество элементов для поиска. По умолчанию, ищется в целом массиве. |
| start |
- |
Начальный индекс для поиска. По умолчанию, поиск начинается с первого элемента. |
| direction |
- |
Направление поиска. Может быть любой из следующих величин: MODE_ASCEND поиск в направлении возрастания, MODE_DESCEND поиск в направлении убывания. |
Пример:
datetime daytimes[];
int shift=10,dayshift;
// Все Time[] серии времени отсортировано в направлении убывания
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);
if(Time[shift]>=daytimes[0]) dayshift=0;
else
{
dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
if(Period()<PERIOD_D1) dayshift++;
}
Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ",
TimeToStr(daytimes[dayshift]));
|