Я пытаюсь реализовать двоичный поиск несколько нетрадиционным способом, используя только 3 аргумента int value (то, что я ищу), int values [] (массив), int n (размер массива). Код ниже находит номер 2 и признает, что 13 не существует, но не может найти числа, такие как 6 или 7. Я думаю, что проблема заключается в окончательном рекурсивном вызове. Это может быть проблема с указателем. Я уверен, что остальная часть кода работает нормально. Любые мысли о том, где я, возможно, ошибаюсь, будут оценены.Binary Search Seg Fault
#include <stdio.h>
#include <stdbool.h>
bool search(int value, int values[], int n);
int main(void)
{
int value = 6;
int values[] = {1, 2, 3, 4, 5, 6, 7};
int n = 7;
bool x = search(value, values, n);
if (x == true)
printf("found\n");
else
printf("not found\n");
}
bool search(int value, int values[], int n)
{
int midpoint = n/2;
if (n/2 <= 0)
{
return false;
}
if (value == values[midpoint])
{
return true;
}
if (value < values[midpoint])
{
return search(value, values, n/2);
}
else if (value > values[midpoint])
{
return search(value, values, n/2);
}
return false;
}
Вам нужно что-то вроде 'values + n - n/2' (это не то же самое, что' values + n/2'). – user3386109
Я уверен, что я следую, поскольку значения - это имя массива. Добавление величины n/2 не похоже на то, что это имеет смысл. Я, конечно же, буду играть с ним. Большое спасибо за ответ! – Ryan
Строка 'if (n/2 <= 0)' неверна. 0 - действительный индекс массива. Вот почему ваш код не может найти какое-либо значение в начале среза массива. – tofro