二分查找的两种方式
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; } }
相关文章推荐
- C++之二分查找/折半查找(非递归和递归两种方式)
- java实现二分查找-两种方式
- 二分查找的两种实现方式(递归和非递归)--python实现
- 二分查找的两种实现方式
- java两种实现二分查找方式
- 二分查找的两种实现方式
- 算法:两种方式(递归/循环)实现二分查找
- javascript中二分查找法的两种实现方式
- 二分查找的两种实现方式(JAVA)
- 二分查找的两种基本方式
- 二分查找的两种方式
- 二分查找的两种实现方式--循环和递归
- c#二(三)分查找的两种方式
- 二分查找的两种写法
- 二分查找的两种实现方法
- 其中获得UserTransaction资源的方式有三种,除了用EJB资源的方式注入以外,还有以下两种方式: (1) JNDI查找 Context context = new InitialContex
- java实现 二分查找 非递归与递归2种方式
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- 练习题013:二分查找(递归和非递归两种方法)