头文件:<algorithm>
排序格式:sort (a,a+n)—— 指从a[0]到a[n-1]排序,他有两种形式
(1)默认从小到大排序
(2)加cmp自定义排序方式:sort (a,a+n,cmp),再定义一个比较函
数,通常对条件筛选进行排序一般与结构体连用。
方式:
bool cmp ( int a, int b){
return a>b;} //表示按照从大到小的顺序,也可与条件句连用
拓展:
去重:去重的方法有多种,通常可以使用计数排序的方法
另外还有STL中的unique (a,a+n) 指对有序数组a从 a[0]到a[n-1]去重
但他并不是直接去重,是有返回值的,他返回了去重后最后一个元素的指针
要赋值使用。
示例:
每个学生都有3门课的成绩:语文、数学、英语。
先按总分从高到低排序,
如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文
成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确
定的。
任务:最后按排名顺序输出前五名名学生的学号和总分。
#include <iostream>
#include <algorithm>
using namespace std;
const int ding=400;
struct student { //结构体的定义
int num,chinese,math,english,total;
};
bool cmp(student a,student b){ //自定义比较函数
if (a.total!=b.total) return a.total >b.total;
if (a.chinese!=b.chinese) return a.chinese > b.chinese;
return a.num<b.num; //比较条件的建立
}
int main()
{student a[ding]; //结构体的声明
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].chinese>>a[i].math>>a[i].english;
a[i].total=a[i].chinese+a[i].math+a[i].english;
a[i].num=i;
}
sort (a+1,a+1+n,cmp); //函数的使用
for(int i=1;i<=5;i++){
cout<<a[i].num<<" "<<a[i].total<<endl;
}
return 0;
}