Бинарный поиск

bool search(int value, int values[], int n)
{
    // смотрим кол-во элементов в массиве, если деление на %2 дает остаток 0, значит, четное кол-во
    // иначе нечетное. Если четное - делим отсортированный массив на 2, смотрим последний элемент в левой части. Сравниваем с искомым.
    // Если нечетное, то вычитаем 1 элемент, делим на 2, смотрим последний элемент в левой части +1.
    // search(needle, haystack, size), где 1 - то, что ищем в массиве; 2 - массив; 3 - размер массива

    int a = 0; //начало массива
    int b = n-1; // конец массива
    int m = b-a; // длина выбранной части массива
    int centr, levo, pravo, i;
    int aa=values[0];
    int bb=values[n-1];
    
   if (aa<=value && bb>=value) 
   {
    do
    {
        float j = m%2; //для определения четного или нечетного
        if (j==0) //если нечетное кол-во элементов в массиве
        {
            centr = (b-a)/2+a;
            if (values[centr]>value)
            {
                b=centr-1;
            }
            else if ((values[centr]<value))
            {
                a=centr+1;
            }
            else return true;
        }
        else // если четное кол-во элементов в массиве
        {
            levo = (b-a+1)/2+a-1;
            pravo = (b-a+1)/2+a;
            if (values[levo]>=value)
            {
                b=levo;
            }
            else
            {
                a=pravo;
            }
        }
        m = b-a;
    
    printf("\na=%i b=%i\n", a, b);
    for (i=a;i<=b;i++)
    {
        printf("%i\n",values[i]);
    }
    
    }
    while (m!=0);
    
// запускаем последний этап проверки, т.к. если остался 1 элемент в конце m может быть равным 0 и цикл закончится

    if (values[a]==value) return true;
    else return false;
       
   }  else return false;
}