二分查找需注意的事项:
1.如何判断查找完成,定义返回值含义,定义退出循环条件
2.如何处理边界问题,例如1 2 3 这个序列,当我们要查找1或者3时,会不会使程序出现BUG
3.对于数列来说,我们通常用整形存储其下标,二分查找若取下标中间数,则会出现什么样的问题?这些问题是否会影响我们的查找,若有问题,则应该如何规避?
下面是代码的实现:
-
#include<stdio.h>
-
-
int bsearch(int data, int table[], unsigned int n)
-
{
-
int lower = 0;
-
int upper = n - 1;
-
int midlle = 0;
-
-
/**/
-
if(n <= 0)
-
{
-
printf("para is invalid\n");
-
return -1;
-
}
-
-
/**/
-
while(upper >= lower)
-
{
-
midlle = (upper + lower) / 2;
-
-
if(data > table[midlle])
-
{
-
lower = midlle + 1;
-
}
-
else if(data < table[midlle])
-
{
-
upper = midlle - 1;
-
}
-
else
-
{
-
printf("data:%d is in table[%d]\n", data, midlle);
-
return midlle;
-
}
-
}
-
-
printf("data:%d is not in table\n", data);
-
return -1;
-
}
-
-
int main(int argc, char **argv)
-
{
-
int table[10] = {1,2,3,4,5,6,7,8,9,10};
-
-
int data = 0;
-
-
for(data = 0;data < 20;data++)
-
{
-
bsearch(data, table, sizeof(table) / sizeof(table[0]));
-
}
-
-
return 0;
-
}
阅读(995) | 评论(0) | 转发(0) |