我想做一個二進制搜索程序,我的代碼是在下面,但是當我給我偶數個元素時,它不會給出任何輸出當我給出奇怪的元素的程序工作很棒!如果是假的程序首先比較的中間值則比中間值爲什麼我的程序不工作,當我把一個偶數的元素
int main()
{
int n,a[50] ;
int i, j, temp,counter,searchv,f,l,mid;
cout<<"Enter no. of elements: ";
cin>>n;
f=0;
l=n-1;
mid=(f+l)/2;
cout<<"l= "<<l<<" mid= "<<mid<<"\n";
cout<<"Enter "<<n <<" values \n";
for(counter=0;counter<n;counter++)
{
cin>>a[counter];
}
for(j=0; j<n; j++)
{
for (int i=(n-1); i>j ;i--)
{
if (a[i]<a[i-1])
{
int temp=a[i-1];
a[i-1]=a[i];
a[i]=temp;
}
}
}
cout<<"SORTED ARRAY!!\n";
for(counter=f;counter<n;counter++)
{
cout<<"Value at Element "<<counter <<" is "<<a[counter];
cout<<endl;
}
cout<<"Enter number to search: ";
cin>>searchv;
if(a[mid]==searchv)
{
cout<<"searched value "<<searchv<<" founded at position "<<mid;
}
else if(searchv>a[mid])
{
for(counter=l;counter>mid;counter--)
{
if(a[counter]==searchv)
cout<<"searched value "<<searchv<<" founded at position "<<counter;
break;
}
}
else if(searchv<a[mid])
{
for(counter=0;counter<mid;counter++)
{
if(a[counter]==searchv)
cout<<"searched value "<<searchv<<" founded at position "<<counter;
break;
}
}
else
{
cout<<"Value not found\n";
}
getch();
return 0;
}
這只是在一個二進制搜索一個半心半意的嘗試:您使用的事實是數組僅在頂層進行排序;之後,這是一個明確的線性搜索。而且你永遠不會報告失敗,因爲最後的'else'子句不應該被輸入。 –
我意識到這可能是學術,但['std :: lower_bound'](http://en.cppreference.com/w/cpp/algorithm/lower_bound)可能會更方便(也更不容易出錯)。如果沒有其他內容,應該通過閱讀可能的實現說明來了解如何實現迭代二進制搜索算法。 – WhozCraig