已知某个班有n(1 <= n <= 100)个学生,输入每行为学生姓名(最多20个字符)和其c语言成绩(0~100),请按照成绩从高到低排序后输出。若有相同的,不能改变其顺序。
时间: 2023-07-14 10:12:19 浏览: 73
输入学生成绩(0~100),给出对应的等级
您可以使用结构体来存储学生姓名和成绩,然后使用快速排序(或其他排序算法)按照成绩从高到低排序。
以下是示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LENGTH 20
#define MAX_STUDENTS 100
typedef struct Student {
char name[MAX_NAME_LENGTH + 1];
int score;
} Student;
void swap(Student *a, Student *b) {
Student temp = *a;
*a = *b;
*b = temp;
}
int partition(Student arr[], int low, int high) {
int pivot = arr[high].score;
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j].score >= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return i + 1;
}
void quickSort(Student arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main() {
int n;
scanf("%d", &n);
Student students[MAX_STUDENTS];
for (int i = 0; i < n; i++) {
scanf("%s %d", students[i].name, &students[i].score);
}
quickSort(students, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%s %d\n", students[i].name, students[i].score);
}
return 0;
}
```
注意,此处我们使用了快速排序算法,并且为了避免改变相同成绩之间的顺序,我们选择了从高到低排序。您可以根据需要选择其他排序算法。
阅读全文