#include<iostream> using namespace std; class person { string name; int age; public: person(const char* n,int a):name(n),age(a){} friend bool operator <(const person& a,const person& b)//运算符重载-比较年龄大小 { return a.age<b.age; } friend bool operator >(const person& a,const person& b)//运算符重载-比较年龄大小 { return a.age>b.age; } friend bool operator ==(const person& a,const person& b)//运算符重载-等于号 { return a.age==b.age; } friend ostream& operator<<(ostream& o,const person& a)//运算符重载-输出 { o<<a.name<<":"<<a.age<<endl; } }; person* bsearch(person* a,int n,const int age)//二分查找 { if(n<=0) return NULL; int mid=n/2; person p("",age); if(a[mid]==p) return a+mid; if(p<a[mid]) return bsearch(a,mid,age); else return bsearch(a+mid+1,n-mid-1,age); } person* bsearch2(person* a,int n,const int age)//二分查找 { int b=0,e=n-1; person t("",age); while(b<=e) { int mid=(b+e)/2; if(a[mid]==t) return a+mid; if(t<a[mid]) e=mid-1; else b=mid+1; } return NULL; } int main() { person a[5]={person("a1",34), person("a2",25), person("a3",16), person("a4",77), person("a5",40)}; for(int i=0;i<5;i++)//排序 { for(int j=i+1;j<5;j++) if(a[j]<a[i]) swap(a[j],a[i]); } for(int i=0;i<5;i++) cout<<a[i]; int fage; cout<<"请输入要查找的年龄:"; cin>>fage; person* p=bsearch2(a,5,fage);//查找 if(p!=NULL) cout<<*p; else cout<<"未找到!\n"; }
g++ -o bsearch.out bsearch.cpp
bsearch.out