对半搜索

#include <iostream>
using namespace std;
int a[5]={1,2,3,4,5};
int Bsearch(int x, int left,int right )
{
	if(left<=right)
	{
		int m=(left+right)/2;
		if(x<a[m]) return Bsearch(x,left,m-1);
		else if (x>a[m]) return Bsearch(x,m+1,right);
		else return m;
	}
	else return -1;
}
int main()
{
	int m=Bsearch(3,0,4);
	if(m==-1)cout<<"搜索失败"<<endl;
	else cout<<"搜索成功"<<endl;
	return 0;
}

  下面再来一个迭代的:

#include <iostream>
using namespace std;
int main()
{
	int a[5]={1,2,3,4,5};//已排好序了
	int left =0;
	int right =4;
	int x=6;
	while(left<=right)
	{
		int m=(left+right)/2;
		if(x<a[m]) right=m-1;
		else if(x>a[m]) left =m+1;
		else {cout<<"搜索成功"<<endl; return 0;}
	}
	cout<<"搜索失败"<<endl;
	return 0;
}

  

posted on 2012-06-20 18:13  矮人狙击手!  阅读(210)  评论(0编辑  收藏  举报

导航