您的位置:首页 > 编程语言 > C语言/C++

CPP一个简单二分查找(查找元素是类对象)

2015-05-06 14:47 183 查看
#include <stdio.h>

#include <stdlib.h>

#include <iostream>

#include <string>

#include <Windows.h>

using namespace std;

/*

@@注意操作符与友元函数的使用!

@@name.c_str()//将string 转换成 const char*类型

*/

class Person

{

string name;

int age;

string addr;

int n ;

public:

Person(){}

Person(const char *n, int a, const char* ad) :name(n), age(a), addr(ad), n(0){ n++; }

~Person(){}

//小于

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 &Out, const Person&a)

{

Out << a.name << " ," << a.age << " ," << a.addr << endl;

return Out;

}

//getnum

int getnum()

{

return this->n;

}

//getname

string getname()

{

return this->name;

}

};

//查找

Person* binarysearch(Person *a, int n, string name)

{

if (n <= 0) return NULL;

int mid = n / 2;

Person t(name.c_str(), 0, "");//将string 转换成 const char*类型

if (a[mid] == t) return a + mid;//只比较name

if (t < a[mid]) return binarysearch(a, mid, name);//只比较name

return binarysearch(a + mid + 1, n - (mid + 1), name);

}

void main()

{

Person a[6] = {

Person("王五", 22, "山东"),

Person("赵四", 33, "河南"),

Person("张三", 44, "浙江") ,

Person("陈五2", 222, "山东"),

Person("徐四2", 332, "河南"),

Person("魏三2", 442, "浙江") };

for (int i = 0; i <6; i++)

{

for (int j = i + 1; j < 6; j++)

{

if (a[j] < a[i])

swap(a[j], a[i]);

}

}

for (int i = 0; i < 6; i++)

{

cout << a[i] << endl;

}

string name;

cout << "请出入名字:";

cin >> name;

Person *p = binarysearch(a, 6, name);

if (p!=NULL)

{

cout << *p << endl;

}

else

{

cout << "不存在!" << endl;

}

system("pause");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐