二分搜索有很多写法,在算法分析与设计中,二分搜索是在递归分治这一章讲到的,所以用递归实现一下。
二分搜索其实很容易理解,设想一根从北京到上海的电线坏掉了,但是不知道是从哪里坏的,要怎样才能使用最少的步骤快速找到问题呢,那就是二分,先到北京与上海的中间位置,我们就称中点吧,测试一下电线,如果是北京到中点有电,那么就说明坏的位置位于上海到中点之间,我们再找到上海到中点的中点,依次类推,很快就能找到问题所在,这种思想就是二分搜索思想。这样会使查找次数指数幂下降,但是前提是待查找的数组是有序的。
这里是递归的版本
#include<bits/stdc++.h>
using namespace std;
int f = 0;
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int find(int x,int l,int r)
{
if(l > r)
return 0;
int now = (l+r)/2;
if(a[now] == x)
f = 1;
else if(a[now] > x)
find(x,l,now-1);
else
find(x,now+1,r);
}
int main()
{
f = 0;
int i;
scanf("%d",&i);
find(i,0,9);
puts(f==1?"yes":"no");
}