функции линейного / бинарного поиска ничего не отображают?

Я сравниваю линейный и бинарный поиск и скорость, с которой каждый из них делает это. Но когда я компилирую программу, ничего не отображается, и я не могу понять, почему. Это работало, когда у меня была только линейная поисковая часть ввода и я тестировал ее. Любая помощь будет принята с благодарностью ~~. Спасибо.

#include <iostream>
using namespace std;

int linearSearch(const int integerArray[],int,int);
int binarySearch(const int integerArray[],int,int);
const int SIZE = 20;

int main()
{
int integerArray[SIZE]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,10};
int position1,position2;

cout << "This program will compare search efficiency for the linear and binary searches " << endl;

position1 = linearSearch(integerArray,SIZE,7);
position2 = binarySearch(integerArray,SIZE,7);

cout << position1 << endl;
cout << position2 << endl;

return 0;
}

int linearSearch(const int integerArray[],int SIZE,int value)
{
int index = 0;
int position1 = -1;
bool foundNum = false;

while(index < SIZE)
{
if(integerArray[index] == value)
{
foundNum = true;
position1 = index;
}
index++;
}
return position1;
}

int binarySearch(const int integerArray[],int size,int value)
{
int first = 0;
int last = size-1;
int midpoint = (first+last)/2;
int position2 = -1;
bool foundNum = false;

while(!foundNum && first<=last)
{
if(integerArray[midpoint] == value)
{
foundNum = true;
position2++;
return position2;
}
else if(integerArray[midpoint] > value)
{
last = midpoint-1;
position2++;
}
else
last = midpoint+1;
position2++;}
return position2;
}

0

Решение

В вашем binarySearch функция midpoint никогда не изменяется, поэтому результатом является бесконечный цикл, если число не найдено мгновенно.

Вы должны обновить midpoint поместив midpoint = (first+last)/2; внутри петли.

0

Другие решения

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

  1. Пересчет средней точки должен выполняться на каждой итерации. Вы делаете это только один раз.
  2. Там должен быть случай, в котором вы модифицируете
    firstи отдельный случай, в котором вы изменяете last, У тебя есть
    два случая, которые изменяют last,
  3. Тебе даже нужен position2? Не midpoint переменная служит этой цели?

Удачи!

0

По вопросам рекламы [email protected]