以往的评估说明有80%的编程初学者不能在第一次就写出正确的折半搜索算法
–Larry Nyhoff的数据结构与算法分析第一章
Nyhoff的书中还详细给出了易犯得错误,并给出了详细的测试。
- 递归版本
int bi_search(int a[], int left, int right, int find_num)
{
if (left <= right)
{
int mid = 0;
mid = (left + right) / 2;
if (a[mid] == find_num)
{
return mid;
}
else if (a[mid] >= find_num)
{
return bi_search(a, left, mid - 1, find_num);
}
else
{
return bi_search(a, mid + 1, right, find_num);
}
}
else
return -1;
}
- 非递归版本
int bi_search1(int a[], int left, int right, int find_num)
{
while(left <= right)
{
int mid = (left + right) / 2;
if (a[mid] == find_num)
{
return mid;
}
else if (a[mid] < find_num)
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
return -1;
}
可能由于递归的程序比较好写,面试官都偏爱让你写非递归的版本。