[英]binary search doesn't work in C
我有以下二分搜索算法:
int search_binary(int* tab,int size, int a)
{
int lower=0,upper=size-1,middle=(lower + upper)/2;
while(lower < upper)
{
if(tab[middle] == a)
break;
else if(tab[middle] < a)
{
upper = middle - 1;
middle = (lower + upper)/2;
} else {
lower = middle + 1;
middle = (lower + upper)/2;
}
}
if(tab[middle] == a)
return middle;
else
return -1;
}
如果我插入一个存在的数字,它要么返回 -1,要么返回错误的索引。
示例数据:
表:2 2 4 5 7 7 8 8 8 9
搜索次数:7
结果:指数为:4
表:1 2 3 4 6 6 6 7 8 9
搜索数量:4
结果:索引为:-1
else if(tab[middle] < a)
{
upper = middle - 1;
middle = (lower + upper)/2;
}
从这里看来,您希望数组按降序排列。 事实上,给它一个这样排序的数组,它对我有用。
只需将if
更改为:
if(tab[middle] > a)
让它为按递增顺序排列的数组工作
你的循环功能略有变化 -
int search_binary(int* tab,int size, int a)
{
int lower=0,upper=size-1,middle=(lower + upper)/2;
while(lower < upper)
{
if(tab[middle] == a){ // if found
return middle; // return index
}
else if(tab[middle] < a) // if a is greater
{
lower= middle ; //lower is updated to middle,search in part above middle
middle = (lower + upper)/2;
} else {
upper = middle - 1; //else upper is updated search in part lower than middle
middle = (lower + upper)/2;
}
}
return -1;
}
当tab[middle]<a
时,你的循环犯了什么错误,然后由于upper
更新,它会在第0 to middle -1
部分0 to middle -1
搜索数字,而数字处于更高的索引。我已经用变量中的正确更改更新了你的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.