示例代码
#include <iostream>
#include <string>
#include <ctime>
#include <algorithm>//这个可以省略,但是安全起见要写上
using namespace std;
class Person{
string name;
int age;
string addr;
public:
Person(const char* n, int a, const char* ad)
:name(n),age(a),addr(ad){}
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 << a.name << "; " << a.age << "; " << a.addr << endl;
return o;
}
};
// 二分法查找
Person* binarySearch(Person* a, int n, const string& name){
if (n<=0){
return NULL;
}
Person t(name.c_str(), 0, "");
int mid = n/2;
if (a[mid] ==t){
return a+mid;
}
if (t<a[mid]){
return binarySearch(a, mid, name);
}
return binarySearch(a+mid+1, n-(mid+1), name);
}
Person* binarySearch2(Person* a, int n, const string& name){
int b=0, e = n-1;
Person t(name.c_str(), 0, "");
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;
}
}
//冒泡排序
void sort(int*a , int n){
bool changed;
do{
changed = false;
for(int i=1; i<n; i++){
if (a[i]<a[i-1]){
swap(a[i], a[i-1]);
changed = true;
}
}
}while(changed);
}
int main (){
Person a[5] = {
Person("kaskk", 34, "lksjalkd"),
Person("asda", 22, "dfs"),
Person("sdfhd", 55, "sdfb"),
Person("mdjsj", 50, "asghjkjhg"),
Person("dfs", 14, "wewqr")
};
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] ;
//cpu时间
clock_t t1 = clock();
cout << *binarySearch(a, 5, "dfs");
cout << *binarySearch2(a, 5, "dfs");
clock_t t2 = clock();
cout << double(t2 - t1)/CLOCKS_PER_SEC;
getchar();
return 0;
}