[英]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.