3、 假设有一老师将以下10名同学的成绩和学号输入电脑,现希望在输入完毕后自动显示学生分数的排行,分别采用插入简单排序、希尔排序和快速排序解决这一问题。
时间: 2024-02-06 17:12:58 浏览: 16
以下是用C语言实现插入排序、希尔排序和快速排序的代码,输入10名同学的学号和成绩后,会自动按成绩从高到低排序输出:
```c
#include <stdio.h>
#include <stdlib.h>
struct student {
int id;
int score;
};
void insert_sort(struct student arr[], int len) {
int i, j;
struct student temp;
for (i = 1; i < len; i++) {
temp = arr[i];
for (j = i - 1; j >= 0 && arr[j].score < temp.score; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
void shell_sort(struct student arr[], int len) {
int gap, i, j;
struct student temp;
for (gap = len / 2; gap > 0; gap /= 2) {
for (i = gap; i < len; i++) {
temp = arr[i];
for (j = i - gap; j >= 0 && arr[j].score < temp.score; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
}
}
}
int partition(struct student arr[], int low, int high) {
struct student pivot = arr[low];
while (low < high) {
while (low < high && arr[high].score <= pivot.score) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low].score >= pivot.score) {
low++;
}
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
void quick_sort(struct student arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
quick_sort(arr, low, pivot - 1);
quick_sort(arr, pivot + 1, high);
}
}
int main() {
struct student students[10];
int i;
printf("请输入10名同学的学号和成绩:\n");
for (i = 0; i < 10; i++) {
scanf("%d %d", &students[i].id, &students[i].score);
}
// 使用插入排序
insert_sort(students, 10);
printf("使用插入排序排序后的结果为:\n");
for (i = 0; i < 10; i++) {
printf("学号:%d,成绩:%d\n", students[i].id, students[i].score);
}
printf("\n");
// 使用希尔排序
shell_sort(students, 10);
printf("使用希尔排序排序后的结果为:\n");
for (i = 0; i < 10; i++) {
printf("学号:%d,成绩:%d\n", students[i].id, students[i].score);
}
printf("\n");
// 使用快速排序
quick_sort(students, 0, 9);
printf("使用快速排序排序后的结果为:\n");
for (i = 0; i < 10; i++) {
printf("学号:%d,成绩:%d\n", students[i].id, students[i].score);
}
printf("\n");
return 0;
}
```
输出示例:
```
请输入10名同学的学号和成绩:
1001 89
1002 78
1003 95
1004 63
1005 72
1006 85
1007 91
1008 67
1009 79
1010 83
使用插入排序排序后的结果为:
学号:1003,成绩:95
学号:1007,成绩:91
学号:1001,成绩:89
学号:1006,成绩:85
学号:1010,成绩:83
学号:1009,成绩:79
学号:1002,成绩:78