一、二分法搜索。
第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。
第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。
解答:将数组进行从小到大排序,搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大 于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。如果查找值和中间值不相等的时候,那么可以确保可以下次的搜索范围可以缩小一半。
#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;
}