我有以下二进制搜索算法:
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,存在或返回错误的索引。
exampledata:
表: 2 2 4 五 7 7 8 8 8 9
搜索号码: 7
结果: 指数是:4
表: 1 2 3 4 6 6 6 7 8 9
搜索号码: 4
结果: 索引是:-1
答案 0 :(得分:3)
else if(tab[middle] < a)
{
upper = middle - 1;
middle = (lower + upper)/2;
}
从这里开始,您希望数组按递减顺序排序。事实上,给它一个这样排序的数组,它对我有用。
只需将if
更改为:
if(tab[middle] > a)
使其适用于按递增顺序排列的数组
答案 1 :(得分:0)
你的功能循环略有变化 -
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
的更新而它会在部分{{...}}
中搜索数字时,你的循环出现了什么错误,而数字是更高的索引。我已经更新了你的代码正确改变vairables。