复兴无基础第十六课 结构体排序
2025-09-21 19:28:29
发布于:上海
T1【基础排序(二)】sort升序
#include <iostream>
#include <algorithm>
using namespace std;
int a[110];
int main() {
//输入n并且输入n的数组
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
//用sort排序完毕后直接输出
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++) {
cout << a[i] << " ";
}
return 0;
}
T2【基础排序(二)】分数统计
#include <bits/stdc++.h>
using namespace std;
int n;
int a[5005];
bool cmp(int x,int y){
return x>y;
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
int x=a[i],y=1;
while(i<n&&a[i+1]==a[i]){
y++,i++;
}
cout<<x<<' '<<y<<endl;
}
return 0;
}
T3sort降序
#include <iostream>
#include <algorithm>
using namespace std;
int a[110];
//定义sort排序规则,从大到小输出
bool cmp(int x,int y){
return x>y;
}
int main() {
//定义n输入n和n个数的数组
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
//用sort将数组降序排序然后输出
sort(a+1,a+1+n,cmp);
for (int i = 1; i <= n; i++) {
cout << a[i] << " ";
}
return 0;
}
T4【基础排序(二)】排队照相
#include <iostream>
#include <algorithm>
using namespace std;
int a[110];
int main() {
//输入n和n个数的数组
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
//将数组升序排序
sort(a, a + n);
//输出正数,为男生的升高排序
for (int i = 0; i < n; i++) {
if (a[i] > 0) cout << a[i] << " ";
}
//输出负数,为女生的升高排序
for (int i = 0; i < n; i++) {
if (a[i] < 0) cout << a[i] << " ";
}
return 0;
}
T5奖状发放
#include<iostream>
#include<algorithm>
using namespace std;
struct student{
string name;
int id;
double sum;
} x[110];
bool cmp(student x, student y){
return x.sum > y.sum;
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> x[i].name >> x[i].id >> x[i].sum;
}
sort(x + 1, x + 1 + n, cmp);
for(int i = 1; i <= n; i++) {
cout<<x[i].name<<" "<<x[i].id<<" "<<x[i].sum<<endl;
}
return 0;
}
T6【结构体的应用】奖状发放2
#include<iostream>
#include<algorithm>
using namespace std;
struct stu
{
string name; //姓名
int id; //学号
double chinese , math , english , sum; //语文成绩 数学成绩 英语成绩 总分
} x[110];
bool cmp(stu a , stu b)
{
if(a.sum != b.sum)
return a.sum > b.sum;
else if(a.chinese != b.chinese)
return a.chinese > b.chinese;
else
return a.id < b.id;
}
int main()
{
//1、定义变量,声明结构体类型,包含姓名,语数英成绩,总分,学号
int n;
//2、输入变量 n 和 n 个学生的信息
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> x[i].name >> x[i].chinese >> x[i].math >> x[i].english;
x[i].id = i;
x[i].sum = x[i].chinese + x[i].math + x[i].english;
}
//3、排序
sort(x + 1 , x + 1 + n , cmp);
//4、输出
cout << x[1].name << " " << x[1].sum << endl;
cout << x[2].name << " " << x[2].sum << endl;
return 0;
}
T7【结构体的应用】超市收银
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 19;
struct people
{
string name;
int w;
} a[maxn];
bool cmp(people x, people y)
{
return x.w > y.w;
}
int main()
{
//1、定义变量,声明结构体类型,包含两个属性,分别为姓名和效率
int n;
//2、输入 n 和 n 个人的信息
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i].name >> a[i].w;
//3、排序
sort(a, a + n, cmp);
//4、输出
for (int i = 0; i < n; i++)
cout << a[i].name << " " << a[i].w << '\n';
return 0;
}
T8【结构体的应用】生日
#include <iostream>
#include<algorithm>
using namespace std;
const int maxn = 109;
struct people
{
string name;
int year,month,day,id;
} a[maxn];
bool cmp(people x, people y)
{
if (x.year != y.year)
{
return x.year < y.year;
}
if (x.month != y.month)
{
return x.month < y.month;
}
if (x.day != y.day)
{
return x.day < y.day;
}
return x.id > y.id;
}
int main()
{
//1、定义变量,声明结构体类型,包含五个属性,姓名,年月日,输入顺序
int n;
//2、输入 n 和 n 个人的信息
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].name >> a[i].year >> a[i].month >> a[i].day;
a[i].id = i;
}
//3、结构体排序
//3.1、年份不同,年份从小到大排序
//3.2、年份相同,月份不同,月份从小到大排序
//3.3、年份相同,月份相同,日子不同,日期从小到大排序
//3.4、年月日相同,输入顺序从大到小排序
sort(a, a + n, cmp);
//4、输出
for (int i = 0; i < n; i++)
cout << a[i].name << '\n';
return 0;
}
T9【结构体的应用】病人排队
#include<iostream>
#include<algorithm>
using namespace std;
struct patient
{
string id;
int order;
int age;
} p[101];
bool cmp(patient a,patient b)
{
if(a.age < 60 && b.age < 60)
return a.order < b.order;
else if(a.age >= 60 && b.age >= 60)
{
if(a.age == b.age)
return a.order < b.order;
else
return a.age > b.age;
}
else
return a.age > b.age;
}
int main()
{
//1、定义变量,声明结构体类型,包含三个属性:id,年龄,输入顺序
int n;
//2、输入 n 和 n 个病人的信息,同时记录输入顺序
cin >> n;
for(int i=1; i<=n; ++i)
{
cin >> p[i].id >> p[i].age;
p[i].order = i;
}
//3、结构体排序
//3.1、年龄都小于60,按照输入顺序排序
//3.2、年龄都大于等于60, 年龄相等,按照输入顺序排序;年龄不同,按照年龄排序
//3.3、年龄一个大于等于60,一个小于60,按照年龄排序
sort(p + 1 , p + n + 1 , cmp);
//4、输出
for(int i = 1; i <= n; i++)
cout << p[i].id << endl;
return 0;
}
T10【结构体的应用】谁考了第k名
#include<iostream>
#include<algorithm>
using namespace std;
struct stu
{
int id;
double score;
} a[101];
bool cmp(stu a , stu b)
{
return a.score > b.score;
}
int main()
{
//1、定义变量
int n , k;
//2、输入
cin >> n >> k;
for(int i = 1; i <= n; ++i)
cin >> a[i].id >> a[i].score;
//3、按照分数进行排序
sort(a + 1 , a + n + 1 , cmp);
//4、输出
cout << a[k].id << " " << a[k].score << endl;
return 0;
}
T11【结构体的应用】个位排序
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
int v , c;
} a[100010];
bool cmp(node x, node y)
{
if (x.c == y.c)
{
return x.v < y.v;
}
return x.c > y.c;
}
int main()
{
//1、定义变量,声明结构体类型,包含两个属性:本身的值以及个位的值
int n;
//2、输入 n 和 n 个数,同时记录每个数的个位数字
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].v;
a[i].c = a[i].v % 10;
}
//3、排序
sort(a, a + n, cmp);
//4、输出
for (int i = 0; i < n; i++)
{
cout << a[i].v << '\n';
}
return 0;
}
T12【结构体的应用】最大数
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 109;
string s[maxn];
bool cmp(string x, string y)
{
if (x.size() == y.size())
return x > y;
return x.size() > y.size();
}
int main()
{
//1、定义变量,声明结构体类型
int n;
//2、输入 n 和 n 个数
cin >> n;
for(int i = 0; i < n; i++)
cin >> s[i];
//3、排序
//3.1、长度相同,按照字典序排序
//3.2、长度不同,长度从大到小排序
sort(s , s + n , cmp);
//4、输出
cout << s[0];
return 0;
}
这里空空如也
有帮助,赞一个