您的位置:首页 > 其它

二分查找的两种方式

2013-08-04 13:55 441 查看
/*
* query.cpp
*
*  Created on: 2013年8月4日
*      Author: Administrator
*/

#include <iostream>

using namespace std;

class Person{
string name;
int age;
string salary;

public:
Person(string name , int age , string salary):name(name),age(age),salary(salary){

}
friend bool operator<(const Person& a , const Person& b ){
return a.name < b.name;
}

friend bool operator==(const Person& a ,const Person& b){

return a.name == b.name;
}

friend ostream& operator<<(ostream& o , const Person& a){
o<<"name"<<" : "<<a.name << " salary: "<<a.salary;

return o;
}
//以下是递归调用的方式
friend Person* binarysearch(Person* p , int n , string name){

if( n == 0 ){
return NULL;
}

int mid = n/2;
Person a(name,0,"");
if(p[mid] == a){
return p + mid;
}else if( a < p[mid] ){
return binarysearch(p,mid,name);
}else{
return binarysearch(p+mid+1,n - mid - 1,name);
}

}

friend Person* binarysearch1(Person* p , int n , string name){
cout<<"这时使用非递归版的二分查找"<<endl;

int l = 0;
int r = n - 1;
Person t(name,0,"");
while( l <=  r){
int mid = (l+r)/2;

if(p[mid] == t){
return p + mid;
}else if( t < p[mid]  ){
r = mid - 1;
}else{
l = mid + 1;
}
}

return NULL;
}
};
int main(){

Person persons[3]={
Person("allen",21,"40000"),
Person("bllen",22,"41000"),
Person("cllen",23,"42000")
};

cout<<"请输入您要查找的人的名字:";
string name ;
cin >> name;

Person* p = binarysearch1(persons,3,name);

if(p == NULL){
cout<< "没有找到"<<endl;
}else{
cout<< *p <<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: