对半搜索
#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; }