Включить все предупреждения компилятора!
Когда if (start == end){ if (pk[start] == number){
истинно, код возвращает ничего .
Я бы ожидал return start;
в этом случае.
Избегайте start + end
переполнения
// center = (start + end)/2;
center = start + (end - start)/2;
Немного иначе:
Я бы рекомендовал возвращать указатель на массив при успехе и NULL
при ошибке
// int binary search(pk a[], int l, int r, unsigned int number){
pk *binary search(pk a[], int l, int r, unsigned int number){
int start = l;
int end = r;
if (start == end){
if (a[start].number == number){
printf ("%d is in a[] at index\n", number, start);
return &a[start];
}else{
printf ("%d is not in a[]\n", number);
return NULL;
}
}
else {
int center = start + (end - start)/2;
if (number <= a[center].number){
return binary search(a, start, center, number);
}else{
return binary search(a, center+1, end, number);
}
}
}
Дополнительно: лучший код будет использовать size_t
для индексации и const a[]
pk *binary search(const pk a[], size_t l, size_t r, unsigned int number){