描述:有N个学生的数据,将学生数据按照成绩高低排序,如果成绩相同则按照姓名首字母排序,若还相同,则按照年龄排序
输入要求:第一行有一个整数N(N<=1000),表示一共有N个学生组数据。接下来的N行,每个学生包括姓名,(小于100的字符串)年龄(整型数),成绩(小于100整数)
输出:输出排序后的学生信息,姓名,年龄,成绩
最佳参考答案:此题主要考察对sort函数的自定义判定规则
#include <iostream> #include<algorithm> #include<string.h> using namespace std; struct Student{ char name[100]; int age; int grade; }; Student student[1000]; bool cmp(Student a, Student b){ if(a.grade!=b.grade) return a.grade<b.grade; int tmp = strcmp(a.name, b.name); if(tmp != 0) return tmp < 0; else return a.age<b.age; } int main() { int stuN; cin >> stuN; for(int i=0;i<stuN;i++){ cin >> student[i].name >> student[i].age >> student[i].grade; } sort(student,student+stuN,cmp); cout << "结果输出: "<<endl; for(int i=0;i<stuN;i++){ cout << student[i].name <<" " << student[i].age <<" "<< student[i].grade<<endl; } return 0; }
总结:如果有排序问题,推荐使用c++:
#include<algorithm> int a[10] sort(a,a+10);
Sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
这种方法乱序数组排序,有没有相同的数值都是不影响的。
第三个参数的用法遵照上方的代码函数cmp,那里是最明了的一个例子。