二分尋找的兩種方式

來源:互聯網
上載者:User
/* * 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;}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.