我正在比较线性和二进制搜索以及每个搜索的速度。但是当我编译程序时没有任何显示,我无法弄清楚原因。当我只有输入并测试它的线性搜索部分时,这个工作。任何帮助将不胜感激~~。谢谢。
#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 :(得分:0)
在您的binarySearch
函数midpoint
中永远不会更改,因此结果是无限循环,除非立即找到该数字。
您应该通过将midpoint
置于循环内来更新midpoint = (first+last)/2;
。
答案 1 :(得分:0)
这听起来像是一个家庭作业问题,所以我不会为你做,但似乎问题在于你的二元搜索。请考虑以下事项:
first
,以及修改last
的单独案例。你有
两个修改last
的案例。position2
吗? midpoint
变量不能用于此目的吗?