基于c语言的数据结构写代码。问题如下:输入50个学生的记录(每条记录包括学号和成绩), 组成记录数组, 然后按照成绩由高到低的次序输出(每层10个记录). 排序方法使用快速排序和归并排序两种。
时间: 2023-06-03 14:03:32 浏览: 201
学生成绩管理系统--c语言写的-数据结构
4星 · 用户满意度95%
好的,这是一个关于数据结构的问题,我可以回答。下面提供两种排序方式的C代码实现。
(1)快速排序
```
#include <stdio.h>
#define MAXSIZE 50
// 定义学生记录结构体
typedef struct {
int id; // 学号
int score; // 成绩
} Element;
// 快速排序函数
void quickSort(Element arr[], int left, int right)
{
if (left >= right) {
return;
}
int i = left, j = right;
Element temp = arr[left];
while (i < j) {
while (i < j && arr[j].score <= temp.score) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i].score >= temp.score) {
i++;
}
arr[j] = arr[i];
}
arr[i] = temp;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main()
{
Element arr[MAXSIZE];
int i, j, temp;
// 输入学生记录
for (i = 0; i < MAXSIZE; i++) {
printf("请输入第%d个学生的学号和成绩:", i+1);
scanf("%d %d", &arr[i].id, &arr[i].score);
}
// 快速排序
quickSort(arr, 0, MAXSIZE - 1);
// 输出排序结果(每层10个记录)
for (i = 0; i < MAXSIZE; i += 10) {
printf("\n第%d层:\n", i / 10 + 1);
for (j = i; j < i + 10 && j < MAXSIZE; j++) {
printf("%d %d\n", arr[j].id, arr[j].score);
}
}
return 0;
}
```
(2)归并排序
```
#include <stdio.h>
#define MAXSIZE 50
// 定义学生记录结构体
typedef struct {
int id; // 学号
int score; // 成绩
} Element;
// 归并排序辅助函数
void merge(Element arr[], Element temp[], int left, int mid, int right)
{
int i = left, j = mid + 1, k = left;
while (i <= mid && j <= right) {
if (arr[i].score >= arr[j].score) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
for (int l = left; l <= right; l++) {
arr[l] = temp[l];
}
}
// 归并排序函数
void mergeSort(Element arr[], Element temp[], int left, int right)
{
if (left >= right) {
return;
}
int mid = (left + right) / 2;
mergeSort(arr, temp, left, mid);
mergeSort(arr, temp, mid + 1, right);
merge(arr, temp, left, mid, right);
}
int main()
{
Element arr[MAXSIZE], temp[MAXSIZE];
int i, j;
// 输入学生记录
for (i = 0; i < MAXSIZE; i++) {
printf("请输入第%d个学生的学号和成绩:", i+1);
scanf("%d %d", &arr[i].id, &arr[i].score);
}
// 归并排序
mergeSort(arr, temp, 0, MAXSIZE - 1);
// 输出排序结果(每层10个记录)
for (i = 0; i < MAXSIZE; i += 10) {
printf("\n第%d层:\n", i / 10 + 1);
for (j = i; j < i + 10 && j < MAXSIZE; j++) {
printf("%d %d\n", arr[j].id, arr[j].score);
}
}
return 0;
}
```
阅读全文