Ваш код не работает, потому что ваша рекурсивная функция ничего не возвращает, если в первой итерации data
не равно arr[mid]
. Таким образом, в таком случае у вас будет бесконечная рекурсия.
Но в любом случае для профессионального программиста код очень и очень слабый.
Например, ваша функция не может быть вызвана для постоянный массив. (Требуется ли еще одна функция с другим именем?)
Функция должна иметь только три параметра
return_type binary_search( const int a[], size_t n, int data );
Если функция возвращает индекс целевого элемента, то ее тип возврата должен быть size_t
, потому что, как правило, тип int
может быть неспособен вместить значение выражения sizeof( a ) / sizeof( *a )
.
Если функция только проверяет, существует ли данное значение в массиве, она должна возвращать либо 0
или 1
и его тип возврата должен быть либо int
, либо _Bool
.
Если функция должна возвращать позицию целевого значения, тогда она должна возвращать первую позицию элемента с целевое значение так же, как и стандартный алгоритм std :: lower_bound в C ++.
Не рекомендуется копировать тот же недостаток стандартной C функции bsearch
, которая в целом не возвращает позицию первого элемента с целевым значением.
Вы не должны использовать оператор == для сравнения значений (хотя функции сравнения в C используют этот оператор), потому что, например, для плавающих чисел вы можете получить неправильный результат. Следует использовать только оператор <. </p>
Итак, предположим, что ваша функция работает с массивами с типом элемента int
и оператором <. Но что делать, если пользователь хочет использовать собственную функцию сравнения элементов массива? </p>
И вторая проблема, если пользователь собирается использовать массив с типом элемента long long
или массив структур нужно ли ему тратить свое время, чтобы написать еще одну функцию двоичного поиска?
Мой совет: никогда не выполняйте никаких заданий на собеседовании. Игнорируйте фирмы, которые пытаются манипулировать вами и вашим временем. Интервью - это разговор равных партнеров. В простом разговоре легко понять «кто есть кто» при условии, что вы сами являетесь квалифицированным программистом. :)