排序

新建Student类,包括姓名、年龄、学号等属性。先对学生信息进行排序,然后实现如下输出。
1)要求按照学生姓名字典序从小到大排列并输出,如果姓名相同则按年龄从大到小排列。

2)利用二分查找法查找姓名为Emma的学生,并输出学生信息。

#include<iostream>
#include<algorithm>
using namespace std;
class Student{     //类的定义
	public:
		Student(){}
		Student(string nam,int i,int a):name(nam),id(i),age(a){}
		string name;
		int id;
		int age;
}; 
Student search(Student stu[],int low,int high,string key);  //折半查找函数的声明
bool cmp(Student stu1,Student stu2){                        //排序
	if(stu1.name[0]!=stu2.name[0])  //姓名不相同时,返回姓名小的
	return stu1.name<stu2.name;
	else return stu1.age>stu2.age;   //姓名相同时,返回年龄大的
}
int main(){
	Student stu[5]={Student("Abc",33,12),Student("Adc",3,123),Student("Bas",3,21),Student("Dee",3,22),Student("Emma",3,9)};
	sort(stu,stu+5,cmp);
	for(int i=0;i<5;i++)
	cout<<stu[i].name<<" "<<stu[i].id<<" "<<stu[i].age<<endl;
	Student sss;
	sss=search(stu,0,4,"Emma");
	cout<<sss.name<<" "<<sss.id<<" "<<sss.age<<endl;
	return 0;
}
Student search(Student *stu,int low,int high,string key){   //折半查找函数,递归实现,有数组,左右端点,查找目标
	int mid=(low+high)/2;
	if(key==stu[mid].name)
	return stu[mid];
	if(stu[mid].name>key)
	return search(stu,low,mid-1,key);
	else return search(stu,mid+1,high,key);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值