sort函数的用法
sort函数一般有两个或三个参数,第一个是数组名,第二个是数组名+元素个数,第三个是排列方式(若用从小到大的默认排列方式,则可以省略),下来用例子来说明。
常用排序法
题目描述:为了快速地把修罗王和邪狼从混乱的队伍中找出来,典狱长准备对排队的囚犯进行从小到大的按编号排序,但是他不知道用哪一种排序方法最合适,因此他准备请教前来协助的高级魔法师张琪曼和楚继光。
输入:共两行,第一行为一个数N(N≤100000),即排队的总人数,第二行为N个数,即每个人的编号,每个编号均不超过int类型的最大值。
输出:输出排好序的数列,每个数以空格间隙。行尾有空格
样例输入:
10
2 1 76 11 4 765 32 56 3 23
样例输出:
1 2 3 4 11 23 32 56 76 765
典型的sort函数裸题,这个题不需要第三个参数。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i,a[100001];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);//默认排序
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
统计分数
这次桐桐要统计的是全市七年级学生的期末成绩,一共统计五个科目:语文、数学、英语、政治和历史。仍然是计算所有学生的五科总成绩,并按照由高到低的顺序将总成绩输出,但是全市七年级学生的总数可能达到20000。你能够编写程序帮助桐桐完成任务吗?
输入:
第1行:一个数n(1≤n≤20000),表示全市七年级学生的总数;
第2行至第n+1行:第i行表示第i-1的学生的成绩(范围在0~100之间的整数),每行有5个数,分别表示当前学生的五科成绩,相邻数之间用空格隔开。
输出:
只有1行,按照由高到低的顺序输出总成绩,相邻数间用空格隔开,末尾有空格。
样例输入
5
89 76 80 67 90
70 80 78 95 92
65 77 88 98 100
82 68 99 87 69
100 92 87 79 90
样例输出
448 428 415 405 402
需要注意的是用sort函数时,数组最好从0开始定义,从1开始也可以,但是数组里面的参数要变。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool compare(int x,int y)
{
return x>y;//由大到小排序,可根据需求改变返回条件
}
int main()
{
int n,i,a[20001],b[20001],c[20001],d[20001],e[20001],f[20001];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d%d%d%d",&a[i],&b[i],&c[i],&d[i],&e[i]);//五科成绩
f[i]=a[i]+b[i]+c[i]+d[i]+e[i];//总成绩
}
sort(f,f+n,compare);//不加入第三个参数即由小到大排序,如有其他需要,则需加入第三个参数
for(i=0;i<n;i++)
{
if(i==0) printf("%d",f[i]);
else printf(" %d",f[i]);
}
printf("\n");
return 0;
}