知班级10个女生的姓名和他们《数据结构》课程的期末考试成绩,请按成绩由高到低的顺序输出这10人的姓名和成绩。要求用折半插入法对成绩进行排序。C语言编码实现
时间: 2023-12-16 14:05:12 浏览: 82
好的,以下是 C 语言的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct student {
char name[20];
int score;
} Student;
// 折半插入排序
void binary_insertion_sort(Student *students, int n) {
int i, j;
Student tmp;
for (i = 1; i < n; i++) {
tmp = students[i];
int low = 0, high = i - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (students[i].score > students[mid].score)
high = mid - 1;
else
low = mid + 1;
}
for (j = i - 1; j >= low; j--)
students[j + 1] = students[j];
students[low] = tmp;
}
}
int main() {
// 创建学生数组
Student students[] = {
{"Alice", 90},
{"Bob", 80},
{"Cathy", 95},
{"David", 70},
{"Eva", 85},
{"Frank", 92},
{"Grace", 87},
{"Helen", 75},
{"Iris", 88},
{"Jackie", 83}
};
int n = sizeof(students) / sizeof(Student);
// 折半插入排序
binary_insertion_sort(students, n);
// 输出排序结果
for (int i = 0; i < n; i++)
printf("%s: %d\n", students[i].name, students[i].score);
return 0;
}
```
这段代码中,我们首先定义了一个 `Student` 结构体,用来表示每个学生的姓名和成绩。然后我们实现了一个折半插入排序算法,它可以对学生数组按照成绩由高到低进行排序。最后我们创建了一个学生数组,对它进行排序并输出结果。
阅读全文