实现功能:期末开始4位同学的成绩,按多级排序,排序规则为:按数学从小到大,如果数学相等,则按语文从大到小排列,如果语文相等,则按英语从小到大排列,如果英语相等,则按历史从大到小排烈
#include "stdafx.h" #include #include #include typedef struct stu { char name[]; int math;//数学 int chinese;//语文 int english;//英语 int history;//历史 }Student; //按照你想排序的方法排序 bool cmp(stu l, stu r) { if (l.math < r.math)//数学从小到大 { return true; } else if (l.math == r.math)//如果数学相等 { if (l.chinese > r.chinese)//按语文从大到小 { return true; } else if (l.chinese == r.chinese)//如果语文相等 { if (l.english < r.english)//按英语从小到大 { return true; } else if (l.english == r.chinese)//如果英语相等 { if (l.history > r.history)//按历史从大到小 { return true; } else if (l.history == r.history) { return false; } } } } return false; } using namespace std; // 小明 73, 80, 86, 79 //小花 77, 78, 60, 90 // 小刚 73, 79, 90, 90 // 小白 77, 78, 40, 89 //排序后 // 小明 73, 80, 86, 79 // 小刚 73, 79, 90, 90 // 小白 77, 78, 40, 89 //小花 77, 78, 60, 90 Student students[] = { { "小明", , , , } , { "小花", , , , } , { "小刚", , , , } , { "小白", , , , } }; int _tmain(int argc, _TCHAR* argv[]) { cout << "排序前:===========================================" << endl; for (Student s : students) { cout << s.name << "" << s.math << "" << s.chinese << "" << s.english << "" << s.history << endl; } sort(students, students + , cmp); cout << "排序后:===========================================" << endl; for (Student s : students) { cout << s.name << "" << s.math << "" << s.chinese << "" << s.english << "" << s.history << endl; } getchar(); return ; }
效果如: