文章
1
粉丝
0
获赞
6
访问
330
#include <bits/stdc++.h>
using namespace std;
typedef struct {
string name;
int sc;
}stu;
int main() {
int n,order;
while(cin>>n>>order){
stu st[n];
stu t;
for(int i=0;i<n;i++){
cin>>st[i].name>>st[i].sc;
}
if(order==0)//降序
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(st[i].sc<st[j].sc){
t.name=st[i].name;
st[i].name=st[j].name;
st[j].name=t.name;
&nbs...
登录后发布评论
#include <stdio.h> // 引入标准输入输出库
#define MAX 1000 // 定义最大学生数量
// 定义学生结构体,包含姓名(最多 10 个字符)和成绩
typedef struct {
char name[10];
int grade;
} Stu;
int main() {
int n, flag; // 变量 n 存储学生人数,flag 决定排序方式
Stu stu[MAX]; // 定义学生数组,存储学生信息
// 读取输入,持续处理多个数据集(适用于多组输入的情况)
while (scanf("%d %d", &n, &flag) == 2) {
// 读取 n 个学生的信息(姓名 + 成绩)
for (int i = 0; i < n; i++) {
scanf("%s %d", stu[i].name, &stu[i].grade);
}
// 使用冒泡排序对学生按照成绩排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
// 根据 flag 选择排序顺序
// flag = 1 表示升序(成绩小的排前面)
// flag = 0 表示降序(成绩大的排前面)
if ((flag && stu[j].grade > stu[j + 1].grade) ||
(!flag && stu[j].grade < stu[j + 1].grade)) {
// 交换 stu[j] 和 stu[j+1] 的位置
Stu t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
// 输出排序后的学生信息
for (int i = 0; i < n; i++) {
printf("%s %d\n", stu[i].name, stu[i].grade);
}
}
return 0; // 程序执行完毕,返回 0 表示正常退出
}
稳定性排序,相同成绩都按先录入排列在前的规则处理