我的任务是创建一个线性和二进制搜索算法,并显示找到输入值所需的计数数量。
我尝试使用探针来计数它们,但是这给了我lnk2019错误。在屏幕上显示比较次数的另一种方式是什么?
这是作业: 编写一个包含至少25个整数的数组的程序。它应该调用一个使用线性搜索算法来定位值之一的函数。该函数应保留对其进行比较的次数的计数,直到找到该值为止。然后,程序应调用使用二进制搜索算法定位相同值的函数。它还应保留进行比较的次数。在屏幕上显示这些值。
`
#include <iostream>
using namespace std;
int linearSearch(int a[], int size, int target);
int binarySearch(const int array[], int size, int value);
int main(void)
{
//linear search
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25 };
int result;
int userNum;
cout << "enter any number between 1 and 25\n";
cin >> userNum;
result = linearSearch(arr, 25, userNum);
if (result == -1)
cout << "Not found in linear search\n";
else
cout << "Linear search : Found at element " << result << endl;
//binary search
result = binarySearch(arr, 25, userNum);
if (result == -1)
cout << "Not found in binary search\n";
else
{
cout << "Binary search : Found at element " << result << endl;
}
return 0;
}
int linearSearch(int a[], int size, int target, int &numProbes)
{
int index = 0;
numProbes = 0;
for (int index = 0; index < size; index++)
numProbes++;
if (target == a[index])
return index;
return -1;
}
int binarySearch(const int array[], int size, int value, int &numProbes)
{
int first = 0,
last = size - 1,
middle,
position = -1;
bool found = false;
numProbes = 0;
while (!found && first <= last)
{
numProbes++;
middle = (first + last) / 2;
if (array[middle] == value)
{
found = true;
position = middle;
}
else if (array[middle] > value)
last = middle - 1;
else first = middle + 1;
}
return position;
} `
答案 0 :(得分:0)
您遇到的问题是binarySearch
函数的定义与它的声明不匹配(定义中还有一个参数)。
最简单的解决方案是将main()
函数移至文件末尾并摆脱函数声明,从而在编译阶段获得清晰的错误消息。