如何显示线性搜索和二进制搜索的比较次数

时间:2019-06-07 18:54:04

标签: c++

我的任务是创建一个线性和二进制搜索算法,并显示找到输入值所需的计数数量。

我尝试使用探针来计数它们,但是这给了我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;
} `

1 个答案:

答案 0 :(得分:0)

您遇到的问题是binarySearch函数的定义与它的声明不匹配(定义中还有一个参数)。

最简单的解决方案是将main()函数移至文件末尾并摆脱函数声明,从而在编译阶段获得清晰的错误消息。