linux下练习 c++ 二分查找

#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

 

 

时间: 2024-07-30 21:33:14

linux下练习 c++ 二分查找的相关文章

linux下的find文件查找命令与grep文件内容查找命令

在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等.                 (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找. 一.find命令 基本格式:find  path expression 1.按照文件名查找 (1)find / -name httpd.conf

linux下vim多文件查找与替换教程

在linux平台上,有很多优秀的shell命令组合来做多文件查找/替换,比如这些命令:find,sed,grep,awk,perl.但其他平台比如windows上就没那么方便了,这时候vim内置的多文件查找命令就有用武之地了,虽然比起外部命令来稍微慢了一点点儿. vim 多文件查找 这个vim内置命令就是vimgrep,有两种基本的使用方式: :vim[grep][!] /{pattern}/[g][j] {file} ... :vim[grep][!] {pattern} {file} ...

linux下使用du命令查找最大的文件的命令

  找出在一个path下的最大文件,可以使用du命令: du -sh[dirname|filename] 当前目录大小 du -sh. 当前目录下文件或目录的大小 du -sh* 显示前十个占用空间最大的文件或目录 du -s * | sort -nr | head 说明: -h已易读的格式显示指定目录或文件的大小 -s选项指定对于目录不详细显示每个子目录或文件的大小

二分查找算法及其变种

前言 二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法.其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功:若给定的值小于中间记录的关键字,则在中间记录的左半区间继续查找:若给定值大于中间记录的关键字,则在中间记录的右半区间继续查找:不断重复这个过程,直到查找成功.否则查找失败.这个思想与孔子中的中庸思想和相似. 二分查找算法的实现 基于上述的思想,可以很快写出如下代码: public int binarySearch(int[

Linux下查找指定时间内修改过的文件

  假如在linux下修改文件后不记得了,我们需要查找指定时间内做过改动的文件,此时我们可以用find命令来查找. find /opt -iname "*" -atime 1 -type f [找出 /opt 下一天前访问过的文件] 选项 OPTIONS 所有的选项都总是返回真值,它们总会被执行,除非放在表达式中执行不到的地方.因此,清楚起见,最好把它们放在表达式的开头部分. -daystart 从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime, -c

linux下查看文件-Linux下如果要在根目录查找内容包含某个字符串的文件,怎么查找啊,谢谢

问题描述 Linux下如果要在根目录查找内容包含某个字符串的文件,怎么查找啊,谢谢 我想在Linux下查看某个函数的定义在那个文件里,前提是我不知道在那个文件夹下面,有谁可以帮我看看啊,谢谢 解决方案 在某个目录下的所有文件的内容中,查找包含某个字符串的文件Linux下查找包含字符串的文件命令linux下查找某个目录下包含某个字符串的文件 解决方案二: 问题终于解决了,非常感谢! 解决方案三: grep -rHwns "search str" / 解决方案四: grep -n &quo

linux下查找包含utf8 BOM头的文件,并删除BOM头信息(FEEF)

UTF-8 编码的文件可以分为no BOM 和 BOM两种格式. 有bom头的存储或者字节流,它一定是unicode字符集编码.到底属于那一种(utf-8还是utf-16或是utf-32),通过头可以判断出来. 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码 UTF-8的BOM是 EFBBBF,因为UE载入UTF-8文件会转成Utf16,上述的EFBBBF 在Utf16中是FFFE(Unicode-LE的BOM) 1.editplus去BOM头的方法  编

Linux下查找指定时间内修改过的文件 — find命令

假如在linux下修改文件后不记得了,我们需要查找指定时间内做过改动的文件,此时我们可以用find命令来查找. find /opt -iname "*" -atime 1 -type f [找出 /opt 下一天前访问过的文件] 选项 OPTIONS 所有的选项都总是返回真值,它们总会被执行,除非放在表达式中执行不到的地方.因此,清楚起见,最好把它们放在表达式的开头部分.   -daystart 从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime, -c

linux下查找某个目录下包含某个字符串的文件

有时候要找以前写的一段程序,但是日久健忘,只记得程序片段里包含某个文字. 那么如何在linux下寻找包含某段文字的文件呢? 强大的find命令可以帮你完成不可能的任务. 比如我只记得我的程序里包含唯一的字符串"111cn.net",于是: 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "111cn.net" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "1