Я хочу реализовать двоичный поиск для массива целых чисел. Я убедился, что массив отсортирован пошагово. Но моя функция не отслеживает все случаи, и некоторые из проверок терпят неудачу. Что мне здесь не хватает? Value
обозначает целое число, которое я пытаюсь найти.Как реализовать двоичный поиск для массива целых чисел?
bool search(int value, int array[], int n)
{
int left = 0;
int right = n - 1;
int middle = (left + right)/2;
while (right >= left)
{
if (array[middle] == value)
return true;
else if (array[middle] < value)
right = middle;
else if (array[middle] > value)
left = middle + 1;
middle = (left + right)/2;
}
return false;
}
Я предполагаю, что некоторые левые или правые граничные случаи не прогнозируются. Я также не сильный относительно while
состояние.
Вы действительно должны научиться использовать отладчик. –
Отладчик использования ** printf ** - отладка. Результат * left *, * middle *, * right * для неудачного примера должен привести к проблеме. – MrSmith42
Как реализовать бинарный поиск? Внимательно. Было замечено, что первая реализация бинарного поиска была опубликована в 1946 году, но первая * правильная * реализация бинарного поиска была опубликована в 1960 году. Вы узнаете много, отлаживая свою собственную версию и убедившись, что она работает во всех случаях , –