成绩排序

描述:有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 << "结果输出:\n"<<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,那里是最明了的一个例子。

posted @ 2018-03-05 11:09  Shaw_喆宇  阅读(263)  评论(0编辑  收藏  举报