我的任务是编写一个浮点值数组的二进制搜索,即使在各种硬件平台或不同的编译器上运行,也会报告相同的答案。另外,提供一个模板,为任何提供的数据类型提供二进制搜索算法。
所以,我写了这个:
#include <iostream>
using namespace std;
template<typename T>
bool bsearch(T num)
{
T arr[] = {5.3, 6.62, 7.74, 10.22, 13.22};
int len = (sizeof(arr)/sizeof(*arr));
int mid, l_bound=0, u_bound = len-1;
while (l_bound <= u_bound)
{
mid =(l_bound+u_bound)/2;
if (num > arr[mid])
l_bound = mid+1;
else if (num < arr[mid])
u_bound = mid -1;
else
return true;
}
return false;
}
int main()
{
float num;
cout <<"Number to search: ";
cin >>num;
if (bsearch(num) == true)
cout <<"Number found!\n";
else
cout <<"Nubmer not found!\n";
}
这适用于我的机器,用于查找数组中的浮点数。 我的问题:这看起来是否满足要求?我怎么知道这可以在其他硬件平台上运行?我是否正确提供了这个问题的模板?
答案 0 :(得分:1)
不,该函数应该接受数组以及搜索的值。
template<typename T>
bool bsearch(T* begin, T* end, T num){
auto len = end - begin;
例如,。
以David Attenborough的声音阅读:
int main()
{
float num;
cout <<"Number to search: ";
cin >>num;
float array_to_search_in[] = {5.3, 6.62, 7.74, 10.22, 13.22};
bool search_result = bsearch(array_to_search_in, array_to_search_in +5, num);
if (search_result == true)...