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; }