Помогите разобраться как работает ArrayBsearch()

 
Прошу на примере данного кода обяснить полученные результаты

//+------------------------------------------------------------------+
//|                                                   Test_ARRAY.mq4 |
//|                                            Copyright © 2005, BSL |
//|                                                      http://www. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, BSL"
#property link      "http://www."

int myarray[10][6];
myarray[0][0]=1;myarray[0][1]=4;myarray[0][2]=5;myarray[0][3]=10;myarray[0][4]=13;myarray[0][5]=94;
myarray[1][0]=3;myarray[1][1]=1;myarray[1][2]=188;myarray[1][3]=2;myarray[1][4]=1;myarray[1][5]=0;
myarray[2][0]=4;myarray[2][1]=2;myarray[2][2]=7;myarray[2][3]=12;myarray[2][4]=35;myarray[2][5]=4;
myarray[3][0]=2;myarray[3][1]=1;myarray[3][2]=13;myarray[3][3]=6;myarray[3][4]=2;myarray[3][5]=0;
myarray[4][0]=4;myarray[4][1]=2;myarray[4][2]=25;myarray[4][3]=18;myarray[4][4]=48;myarray[4][5]=5;
myarray[5][0]=3;myarray[5][1]=2;myarray[5][2]=23;myarray[5][3]=6;myarray[5][4]=6;myarray[5][5]=1;
myarray[6][0]=4;myarray[6][1]=2;myarray[6][2]=9;myarray[6][3]=10;myarray[6][4]=34;myarray[6][5]=6;
myarray[7][0]=2;myarray[7][1]=2;myarray[7][2]=28;myarray[7][3]=24;myarray[7][4]=9;myarray[7][5]=2;
myarray[8][0]=3;myarray[8][1]=4;myarray[8][2]=7;myarray[8][3]=4;myarray[8][4]=36;myarray[8][5]=86;
myarray[9][0]=4;myarray[9][1]=1;myarray[9][2]=248;myarray[9][3]=27;myarray[9][4]=2;myarray[9][5]=0;

int start()
   {
   int i,j;
   string mystr="";
   for (i=0; i<ArrayRange(myarray,0); i++)
      {
      mystr="Несортированный myarray "+i+"=";
      for (j=0; j<ArrayRange(myarray,1); j++)
         {
         mystr=StringConcatenate(mystr,myarray[i][j],";");
         }
      Print(mystr);
      }
      
   Print("Производим сортировку");
   
   ArraySort(myarray);
   for (i=0; i<ArrayRange(myarray,0); i++)
      {
      mystr="Сортированный myarray "+i+"=";
      for (j=0; j<ArrayRange(myarray,1); j++)
         {
         mystr=StringConcatenate(mystr,myarray[i][j],";");
         }
      Print(mystr);
      }

   Print("Производим поиск значения 1");
   Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,1));

   Print("Производим поиск значения 2");
   Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,2));

   Print("Производим поиск значения 3");
   Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,3));

   Print("Производим поиск значения 4");
   Print("Найденный элемент имеет индекс =", ArrayBsearch(myarray,4));

   return(0);
   }




а результаты получаются вот такие:

2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =9
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 4
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =4
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 3
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =2
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 2
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =0
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 1
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 9=4;2;9;10;34;6;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 8=4;1;248;27;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 7=4;2;7;12;35;4;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 6=4;2;25;18;48;5;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 5=3;2;23;6;6;1;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 4=3;1;188;2;1;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 3=3;4;7;4;36;86;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 2=2;2;28;24;9;2;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 1=2;1;13;6;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Сортированный myarray 0=1;4;5;10;13;94;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим сортировку
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 9=4;1;248;27;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 8=3;4;7;4;36;86;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 7=2;2;28;24;9;2;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 6=4;2;9;10;34;6;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 5=3;2;23;6;6;1;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 4=4;2;25;18;48;5;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 3=2;1;13;6;2;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 2=4;2;7;12;35;4;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 1=3;1;188;2;1;0;
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Несортированный myarray 0=1;4;5;10;13;94;

Поскольку в help функции записано
Возвращает индекс первого найденного элемента в первом измерении массива
то соответственно хотелось бы получить результаты

2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =6
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 4

2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =3
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 3

2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =1
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 2

2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Найденный элемент имеет индекс =0
2006.01.11 22:30:44 test_ARRAY EURUSD,H4: Производим поиск значения 1

Прошу разработчиков или людей понимающих суть проблеммы обьяснить происходящее:
Или я неправильно пользуюсь функцией ,
или я неправильно воспринимаю действительность,
или это глюк,
или это фишка.

Заранее благодарен.

ЗЫЖ используется билд 186.

 
ArrayBSearch работает правильно.

ArrayBSearch расшифровывается как бинарный поиск в отсортированном массиве. Если массив содержит только уникальные элементы, то все ищется точно.

Если же есть повторяющиеся значения, то находится любая позиция, в которой присутствует поисковое значение. Такова реализация двоичного (делением пополам) поиска.

В данном случае Вам лучше написать свою линейную функцию поиска путем перебора. Или комбинированный поиск на основе ArrayBSearch и последующим откатом назад до первого значения.
 
2Renat

Если массив содержит только уникальные элементы, то все ищется точно.

Подтверждаю.

Если же есть повторяющиеся значения, то находится любая позиция, в которой присутствует поисковое значение. Такова реализация двоичного (делением пополам) поиска.

Благодарю за разъяснение.


В данном случае Вам лучше написать свою ... функцию ...
.

Не проблема, напишу, найду как мне нужно, но я думаю здесь именно тот случай когда абсолютное
большинство пользователей со мной согласится:
Лучше бы все-же доработать штатную функцию что-бы возвращаемый индекс вместо
... Возвращает индекс первого найденного элемента в первом измерении массива...
.
был-бы
... Возвращает индекс первого найденного элемента в первом измерении массива...
.
иначе нет смысла пользоваться функцией в чистом виде для поиска в массивах с повторяющимися значениями в первом измерении массива.
Я думаю уважаемый ALL согласится со мной что задавая поиск конкретного значения мы как правило
хотим найти именно ПЕРВЫЙ элемент соответствующий условию поиска и он всегда будет удовлетворять
условию "найти любой соответствующий"
. В данном же случае имеем обратное - ищется любой соответствующий который только в случае уникальных элементов действительно будет первым

Или я не прав. Как думаешь уважаемый ALL. И что думают по этому поводу разработчики.