2018-02-25

一、二分法搜索。

第一行包含一个整数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;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容