Функция двоичного поиска - выводит число сравнений, даже если число не может быть найдено в массиве - PullRequest
0 голосов
/ 13 апреля 2020

Приведенный ниже код используется для выполнения двоичного поиска по отсортированному массиву, а затем возвращает количество сравнений, которое потребовалось для поиска значений, введенных пользователем.

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». (Результат правильный).

enter image description here

Я пытаюсь отредактировать эту функцию, чтобы она также могла распечатывать количество сравнений, даже если пользователь входной номер не существует в массиве.

Таким образом, в идеале, если я попытаюсь найти число «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 «Значение не найдено». для суда, но даже это не работает. Если я запускаю код, это результат, который я получаю

enter image description here

1 Ответ

2 голосов
/ 13 апреля 2020

Вы можете просто добавить оператор if перед возвратом, например:

    if (!found)
    {
        cout << "The value " << value << " not found.\n";
    }

Или вы можете вернуть два значения с помощью std::pair (найдено ли значение и количество). Исходя из этого, вы можете распечатать результат на сайте вызова.

...