linux下练习 c++ 二分查找

简介: #include using namespace std; class person { string name; int age; public: person(const char* n,int a):name(n),age(a){} friend bool operator b.
#include<iostream>
using namespace std;
class person
{
	string name;
	int age;
public:
	person(const char* n,int a):name(n),age(a){}
	friend bool operator <(const person& a,const person& b)//运算符重载-比较年龄大小
	{
		return a.age<b.age;
	}
	friend bool operator >(const person& a,const person& b)//运算符重载-比较年龄大小
	{
		return a.age>b.age;
	}
	friend bool operator ==(const person& a,const person& b)//运算符重载-等于号
	{
		return a.age==b.age;
	}
	friend ostream& operator<<(ostream& o,const person& a)//运算符重载-输出
	{
		o<<a.name<<":"<<a.age<<endl;
	}
};
person* bsearch(person* a,int n,const int age)//二分查找
{
	if(n<=0) return NULL;
	int mid=n/2;
	person p("",age);
	if(a[mid]==p) return a+mid;
	if(p<a[mid]) return bsearch(a,mid,age);
	else return bsearch(a+mid+1,n-mid-1,age);
	
}
person* bsearch2(person* a,int n,const int age)//二分查找
{
	int b=0,e=n-1;
	person t("",age);
	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;
	}
	return NULL;
	
}
int main()
{
	person a[5]={person("a1",34),
				person("a2",25),
				person("a3",16),
				person("a4",77),
				person("a5",40)};
	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];
	int fage;
	cout<<"请输入要查找的年龄:";
	cin>>fage;
	person* p=bsearch2(a,5,fage);//查找
	if(p!=NULL) cout<<*p;
	else cout<<"未找到!\n";
}


g++ -o bsearch.out bsearch.cpp

bsearch.out

 

 

相关文章
|
1月前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
89 0
|
1月前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
82 1
Linux C/C++之IO多路复用(aio)
|
1月前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
35 0
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
275 3
|
1月前
|
资源调度 Linux 调度
Linux C/C++之线程基础
这篇文章详细介绍了Linux下C/C++线程的基本概念、创建和管理线程的方法,以及线程同步的各种机制,并通过实例代码展示了线程同步技术的应用。
29 0
Linux C/C++之线程基础
|
1月前
|
Linux C++
Linux C/C++之IO多路复用(poll,epoll)
这篇文章详细介绍了Linux下C/C++编程中IO多路复用的两种机制:poll和epoll,包括它们的比较、编程模型、函数原型以及如何使用这些机制实现服务器端和客户端之间的多个连接。
24 0
Linux C/C++之IO多路复用(poll,epoll)
|
1月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
37 0
Linux C/C++之TCP / UDP通信
|
1月前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
30 0
Linux c/c++之IPC进程间通信
|
1月前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
26 0
Linux c/c++进程间通信(1)
|
1月前
|
Linux C++
Linux c/c++之进程的创建
这篇文章介绍了在Linux环境下使用C/C++创建进程的三种方式:system函数、fork函数以及exec族函数,并展示了它们的代码示例和运行结果。
34 0
Linux c/c++之进程的创建