Возникли проблемы с запуском простого бинарного поиска на C ++ - PullRequest
0 голосов
/ 01 мая 2020

Я новичок в программировании, и теперь я собираюсь пройти бинарный поиск на C ++. Я запустил бинарный поиск, когда впервые узнал его, и он работал нормально, но с тех пор, как я пытался воспроизвести его самостоятельно, он продолжает отображать «Извините, мы не нашли ваш номер», и когда я отображаю возвращаемое значение, он всегда возвращает -1 (никогда не менялось в l oop). Я оставлю код ниже:

int main(){

int 
numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
searchValue = 8,
returnValue = -1,
low = 0,
high = ARR_SIZE,
mid = (low + high) / 2;

while(low < high)
{
    if(numbers[mid] == searchValue)
    {
        returnValue = mid;
        break;
    }
    else if(numbers[mid] < searchValue)
    {
        low = mid + 1;
    }
    else
    {
        high = mid - 1;
    }
    mid = (low + high) / 2;
}

if(returnValue == -1)
{
    cout << "Sorry we did not find the number" << endl;
}
else
{
    cout << "We found your number! It is located at index " << returnValue << endl;
}

return 0;
}

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

Ответ довольно прост:

Замените while (low < high) на while (low <= high). Меня устраивает. Приветствия!

Я хотел бы отметить эту ветку переполнения стека. Это помогло мне понять, где проблема в вашем коде.

1 голос
/ 01 мая 2020

Предполагая ARRAY_SIZE, если длина массива.

Вам нужно изменить условие while l oop на while ((low <= high)) Из-за low < high оно не будет в l oop при низком уровне == high.

Вы можете добавить mid<10, чтобы избежать выхода массива из области видимости при использовании & &. Это сохранит вашу последнюю итерацию.

Надеюсь, это поможет.

...