对半搜索
#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;
}
浙公网安备 33010602011771号