编写一个排序函数(提示:指针实现),使其既能实现对学生成绩的升序排序,又能实现对学生成绩的降序排序
时间: 2023-11-28 12:50:13 浏览: 79
用指针实现的排序算法
以下是一个指针实现的学生成绩排序函数,可以实现升序排序和降序排序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20];
int score;
} Student;
void sort(Student *students, int n, int asc) {
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if ((asc && students[i].score > students[j].score) ||
(!asc && students[i].score < students[j].score)) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
int main() {
Student students[] = {
{"Tom", 90},
{"Jerry", 80},
{"Mike", 95},
{"John", 85},
{"Lucy", 92},
};
int n = sizeof(students) / sizeof(Student);
int i;
printf("Original order:\n");
for (i = 0; i < n; i++) {
printf("%s %d\n", students[i].name, students[i].score);
}
sort(students, n, 1);
printf("\nAscending order:\n");
for (i = 0; i < n; i++) {
printf("%s %d\n", students[i].name, students[i].score);
}
sort(students, n, 0);
printf("\nDescending order:\n");
for (i = 0; i < n; i++) {
printf("%s %d\n", students[i].name, students[i].score);
}
return 0;
}
```
在上面的代码中,我们定义了一个 `Student` 结构体,包含学生姓名和成绩。`sort` 函数接受一个 `Student` 数组、数组长度和排序方式(`asc` 为 1 表示升序,0 表示降序),并用选择排序实现了排序。最后在 `main` 函数中,我们定义了一个 `Student` 数组并输出原始顺序、升序和降序三个版本的输出结果。
阅读全文