Приведенный ниже код используется для выполнения двоичного поиска по отсортированному массиву, а затем возвращает количество сравнений, которое потребовалось для поиска значений, введенных пользователем.
int binarySearch(int arr[], int numelems, int value)
{
int first = 0, last = numelems - 1, middle, position = -1;
bool found = false;
int count = 0;
while (!found && first <= last)
{
middle = (first + last) / 2;
if (arr[middle] == value)
{
found = true;
position = middle;
count++;
}
else if (arr[middle] > value)
{
last = middle - 1;
count++;
}
else
{
first = middle + 1;
count++;
}
}
return count;
}
Ниже приведен результат, который я получаю, когда вызываю функцию для поиска числа «38». (Результат правильный).
Я пытаюсь отредактировать эту функцию, чтобы она также могла распечатывать количество сравнений, даже если пользователь входной номер не существует в массиве.
Таким образом, в идеале, если я попытаюсь найти число «24», программа должна распечатать что-то вроде этого:
The value 24 does not exist in the array.
It took 5 compares to reach the conclusion.
Каким-то образом Я не могу понять, как это сделать ... Я пытался добавить оператор if вне времени l oop, как показано ниже
int binarySearch(int arr[], int numelems, int value)
{
int first = 0, last = numelems - 1, middle, position = -1;
bool found = false;
int count = 0;
while (!found && first <= last)
{
middle = (first + last) / 2;
if (arr[middle] == value)
{
found = true;
position = middle;
count++;
}
else if (arr[middle] > value)
{
last = middle - 1;
count++;
}
else if (arr[middle] < value)
{
first = middle + 1;
count++;
}
}
if (found = false)
{
cout << "Value not found.";
}
return count;
}
Я не уверен, как распечатать на счет даже программа не нашла номер, поэтому я просто написал инструкцию cout «Значение не найдено». для суда, но даже это не работает. Если я запускаю код, это результат, который я получаю