我正在C++中实现二进制搜索算法,但算法没有返回正确的值。代码可以找到here。二进制搜索没有返回正确的值
template<class T>
int binary_search(T search_value, T search_array[]) {
int mid; /* The middle element of the remaining array to be searched. */
int min = 0; /* The first index of the array. */
/* This forumla gives us the size of the array. */
int max = sizeof(search_array)/sizeof(search_array[0]);
/* Continue searching until min >= max. */
while (min < max) {
/* Compute the value of mid using a formula that won't produce a number
* larger than the maximum allowed value of an integer. */
mid = (max-min)/2 + min;
/* Depending the whether search_value is larger or smaller than the
* value of whatever is at search_array[mid], set one of mid and max
* equal to mid. */
if (search_value > search_array[mid])
min = mid + 1;
else if (search_value < search_array[mid])
max = mid + 1;
else {
return mid;
}
}
return -1;
}
鉴于数组{0,1,3,5,7,9}和搜索3,函数应返回2,3阵列中的索引。我的函数返回-1,这意味着3在数组中找不到。问题在哪里?
开始似乎是一个非常琐碎测试用例在调试器到步骤通过.. – Blorgbeard 2012-02-13 21:59:03
第一。在函数中使用sizeof-construction来接收数组大小是一个坏主意。在函数中再加一个参数,比如'int array_size' – mikithskegg 2012-02-13 22:00:57
你试过调试吗? – littleadv 2012-02-13 22:01:27