(sort+结构体)成绩排序
sort 使用需#include<algorithm>
sort函数的3个参数:
1.需要排序数组的起始地址
2.需要排序数组的结束地址
3.排序函数 (若不写排序函数,默认为整数的从小到大排序)
sort(arr,arr+n,cmp);
对结构体排序的使用方法:
有一个node类型的数组node arr[100],想对它进行排序:
1.先按a值升序排列
2.如果a值相同,再按b值降序排列
3.如果b还相同,就按c升序排列。
就可以写这样一个比较函数:
struct node{ int a; int b; double c; }; bool cmp(node x,node y){ if(x.a!=y.a) return x.a>y.a; if(x.b!=y.b) return x.b>y.b; return x.c<y.c; }
例:给出n个学生的成绩,将这些学生按成绩排序,排序规则:总分高的在前;总分相同,数学成绩高的在前;总分与数学相同,英语高的在前;总分数学英语都相同,学号小的在前
输入格式
第一行一个正整数n,表示学生人数
接下来n行每行3个0~100的整数,第i行表示学号为i的学生的数学、英语、语文成绩
接下来n行每行3个0~100的整数,第i行表示学号为i的学生的数学、英语、语文成绩
输出格式
输出n行,每行表示一个学生的数学成绩、英语成绩、语文成绩、学号
按排序后的顺序输出
按排序后的顺序输出
样例输入
2
1 2 3
2 3 4
1 2 3
2 3 4
样例输出
2 3 4 2
1 2 3 1
1 2 3 1
#include <iostream> #include <stdlib.h> #include <math.h> #include <string.h> #include <algorithm> using namespace std; int n,m; int ans=0; bool vis[105]; int dp[105],aa[105]; struct node{ int id; int math; int eglish; int chinese; int all; }; bool cmp(node x,node y){ if(x.all!=y.all) return x.all>y.all; if(x.math!=y.math) return x.math>y.math; if(x.eglish!=y.eglish) return x.eglish>y.eglish; return x.id<y.id; } int main() { node arr[105]; cin>>n; node stu; for(int i=0;i<n;i++){ stu.id=i+1; cin>>stu.math>>stu.eglish>>stu.chinese; stu.all=stu.math+stu.eglish+stu.chinese; arr[i]=stu; } sort(arr,arr+n,cmp); for(int i=0;i<n;i++){ cout<<arr[i].math<<" "<<arr[i].eglish<<" "<<arr[i].chinese<<" "<<arr[i].id<<endl; } return 0; }