一、二分法搜索制肮。
第一行包含一個整數(shù)n冒窍,為非降序列長度。1 <= n <= 100000豺鼻。
第二行包含n個整數(shù)超燃,為非降序列各元素。所有元素的大小均在0-1,000,000,000之間拘领。
第三行包含一個整數(shù)m意乓,為要詢問的給定值個數(shù)。1 <= m <= 10000约素。
接下來m行届良,每行一個整數(shù),為要詢問最接近元素的給定值圣猎。所有給定值的大小均在0-1,000,000,000之間士葫。
? ? 解答:將數(shù)組進行從小到大排序,搜素過程從數(shù)組的中間元素開始送悔,如果中間元素正好是要查找的元素慢显,則搜素過程結(jié)束;如果某一特定元素大于或者小于中間元素欠啤,則在數(shù)組大?于或小于中間元素的那一半中查找荚藻,而且跟開始一樣從中間元素開始比較。如果在某一步驟數(shù)組為空洁段,則代表找不到应狱。如果查找值和中間值不相等的時候,那么可以確膘羲浚可以下次的搜索范圍可以縮小一半疾呻。
#include<iostream>?
using namespace std;
int i,n,m,l,r,mid,b,a[1000009];
int main()
{
cin>>n;
for(i=1;i<=n;i++)
? ?cin>>a[i];
? ? ? cin>>m;
for(i=1;i<=m;i++)
{
cin>>b;
if(a[1]>b)
{
cout<
continue;
}
if(a[n]
{
cout<
continue;
}
l=1;r=n;?
while(l
{
mid=(l+r)/2;
if(a[mid]>=b)
r=mid;
else l=mid+1;?
}?
if(a[l]==b)
{
cout<
continue;
}
if(a[l]-b
{
cout<
continue;
}
else cout<
}
? ? return 0;
}