放弃吧,不会有人给我点小心心的
题目描述
给定N个正整数a1,a2,⋯,an,请输出这N个数从大到小排序后的结果。
输入格式
第一行一个正整数N,代表正整数个数。
第二行N个正整数,表示ai。
输出格式
一行,输出这N个数,从大到小排序后的结果。
样例数据
样例输入1
5
3 9 6 3 4
样例输出1
9 6 4 3 3
数据范围
对于前40%的数据,有1≤N≤1000;
对于前80%的数据,有1≤ai≤100000;
对于100%的数据,有1≤N≤2×1000000,1≤ai≤1000000000。
------------------------------------------------------我是分割线------------------------------------------------------------
这道题,可以用sort排序来解决
sort排序就是c++提供的函数,能自动帮你排序,效率也比什么冒泡快 所以你写什么冒泡,直接sort一下就好了
那么sort怎么用呢?
sort(数组名字+你要排序的第一个下表,数组名字+你要排序的最后一个下表);
例如,我有一个数组a,要排序1到n项,就应该这么写:
sort(a+1,a+n+1);
如果要排序的第一个下标是0(比如我要排序0到n),就应该这么写:
sort(a,a+n)
如果你要排序结构体,就要自己写一个函数
比如这道题:
题目描述
现有 N(N≤100000) 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 8 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 150 的自然数)。请根据总分从高到低给所有学生排序。如果有多个总分相同的学生,根据输入的顺序进行输出。
输入格式
无
输出格式
无
输入输出样例
输入 #1
3
senpai 80 51 4
lxl 112 10 23
fafa 112 13 20
输出 #1
lxl 112 10 23
fafa 112 13 20
senpai 80 51 4
------------------------------------------------------我是分割线------------------------------------------------------------
这道题的代码是这样的:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll n;
struct ik {
string name;
ll yu,s,yi,sum=0,id;
} a[100050];
int cmp(ik b1,ik b) {
if(b1.sum!=b.sum) {
return b1.sum>b.sum;
} else if(b1.sum==b.sum) {
return b1.id<b.id;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(ll i=1; i<=n; i++) {
cin>>a[i].name>>a[i].yu>>a[i].s>>a[i].yi;
a[i].sum=a[i].yu+a[i].s+a[i].yi;
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
for(ll i=1; i<=n; i++) {
cout<<a[i].name<<" "<<a[i].yu<<" "<<a[i].s<<" "<<a[i].yi<<endl;
}
return 0;
}
cmp这个函数,相当于是自定义了排序的规则:
如果排序的时候sum不相等,就按sum的大小从大到小排序
要是sum相等,就比较id,id小的排在前面
sort函数默认从小到大排,如果你想从大到小排,你可以写一个cmp函数:
bool cmp(long long a,long long b){
return a>b;
}
sort(a+1,a+n+1,cmp)
或者这样写:
sort(a+1,a+1+n,greater<int>());
------------------------------------------------------我是分割线------------------------------------------------------------
所以,现在给出AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll n;
struct ik{
string name;ll yu,s,yi,sum=0,id;
}a[100050];
int cmp(ik b1,ik b){
if(b1.sum!=b.sum){
return b1.sum>b.sum;
} else if(b1.sum==b.sum){
return b1.id<b.id;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
for(ll i=1;i<=n;i++){
cin>>a[i].name>>a[i].yu>>a[i].s>>a[i].yi;a[i].sum=a[i].yu+a[i].s+a[i].yi;a[i].id=i;
}sort(a+1,a+1+n,cmp);
for(ll i=1;i<=n;i++){
cout<<a[i].name<<" "<<a[i].yu<<" "<<a[i].s<<" "<<a[i].yi<<endl;
}
return 0;
}
给了你们也没用,你们又不知道题目在哪里
文章介绍了如何利用C++的sort函数对整数数组和结构体数组进行排序,包括基础的整数降序排序和基于结构体的多条件排序。通过自定义比较函数cmp实现排序规则,当总分相同时,按照输入顺序排列。示例代码展示了完整的解决方案。

4306

被折叠的 条评论
为什么被折叠?



