算法设计与分析----二分搜索(递归)

二分搜索有很多写法,在算法分析与设计中,二分搜索是在递归分治这一章讲到的,所以用递归实现一下。
二分搜索其实很容易理解,设想一根从北京到上海的电线坏掉了,但是不知道是从哪里坏的,要怎样才能使用最少的步骤快速找到问题呢,那就是二分,先到北京与上海的中间位置,我们就称中点吧,测试一下电线,如果是北京到中点有电,那么就说明坏的位置位于上海到中点之间,我们再找到上海到中点的中点,依次类推,很快就能找到问题所在,这种思想就是二分搜索思想。这样会使查找次数指数幂下降,但是前提是待查找的数组是有序的。
这里是递归的版本

#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");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章