用c语言:本题:补充函数 sortByChoose()的剩余部分,其要求是利用选择排序算法根据学生成绩(score)实现对结构体数组元素降序排序。 函数接口定义: void sortByChoose(struct Student *pData,int n); 裁判测试程序样例: #include<stdio.h> #include<stdlib.h> #define N 10 struct Student { int num; int score; }; void sortByChoose(struct Student *pData,int n); int main(void) { struct Student data[10],*p; int i; for(p=data,i=0;i<N;i++) { scanf("%d %d",&p->num,&p->score); p++; } sortByChoose(data,N); for (p=data,i=0;i<N;i++) { printf("%2d-%-5d", p->num, p->score); p++; } return 0; } void sortByChoose(struct Student *pData,int n) { struct Student *p1,*p2,p; int num, score,i,j; for(p1=pData;p1<pData+n-1;p1++) { / 请在这里填写答案 */ } } 输入样例: 29 90 15 80 87 55 65 84 35 80 33 55 44 79 99 80 89 80 41 55 输出样例: 29-90 65-84 15-80 35-80 99-80 89-80 44-79 87-55 33-55 41-55
时间: 2024-01-17 13:05:25 浏览: 14
以下是 `sortByChoose()` 函数的代码实现:
```c
void sortByChoose(struct Student *pData, int n) {
struct Student *p1, *p2, temp;
for (p1 = pData; p1 < pData + n - 1; p1++) {
for (p2 = p1 + 1; p2 < pData + n; p2++) {
if (p2->score > p1->score) {
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
}
}
}
```
这个函数使用选择排序算法对学生成绩进行降序排序,每次找到最大的元素,并将其放到已排序部分的末尾。在这个函数中,我们使用了两个指针 `p1` 和 `p2`,其中 `p1` 指向当前未排序部分的第一个元素,`p2` 则用于遍历未排序部分。如果 `p2` 指向的元素比 `p1` 指向的元素大,那么就交换这两个元素。这样,每一次外层循环结束后,已排序部分的末尾就会出现一个最大的元素。最终,当外层循环结束时,整个数组就会被排序。
相关问题
c语言编程:利用“选择排序算法“对结构体数组进行排序补充函数 sortByChoose()的剩余部分,其要求是利用选择排序算法根据学生成绩(score)实现对结构体数组元素降序排序。 函数接口定义: void sortByChoose(struct Student *pData,int n);
好的,我会为你补充函数sortByChoose()的剩余部分。以下是完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Student {
char name[20];
int score;
};
void sortByChoose(struct Student *pData, int n) {
int i, j, max_index;
struct Student temp;
for (i = 0; i < n - 1; i++) {
max_index = i;
for (j = i + 1; j < n; j++) {
if (pData[j].score > pData[max_index].score) {
max_index = j;
}
}
if (max_index != i) {
temp = pData[i];
pData[i] = pData[max_index];
pData[max_index] = temp;
}
}
}
int main() {
struct Student stu[5] = {
{"Tom", 89},
{"Jerry", 76},
{"Mike", 92},
{"Mary", 85},
{"John", 78}
};
int i;
printf("Before sorting:\n");
for (i = 0; i < 5; i++) {
printf("%s: %d\n", stu[i].name, stu[i].score);
}
sortByChoose(stu, 5);
printf("\nAfter sorting:\n");
for (i = 0; i < 5; i++) {
printf("%s: %d\n", stu[i].name, stu[i].score);
}
return 0;
}
```
函数sortByChoose()使用选择排序算法,对结构体数组中的元素按照学生成绩(score)进行降序排序。在函数中,我们定义了三个变量:i、j和max_index。i和j用于循环遍历数组,max_index用于存储当前最大值的下标。我们首先将max_index初始化为i,然后在内层循环中查找最大值的下标,并将其存储在max_index中。如果max_index不等于i,说明第i个元素不是当前最大值,需要将其与最大值交换位置。最后,函数执行完毕后,结构体数组stu中的元素就已经按照学生成绩降序排列了。
我希望这个代码能够帮助到你,如果你有任何问题,请随时问我!
用c语言编写函数,按照成绩对五个学生进行排序包括学号,姓名,成绩
这是一个经典的排序算法题,可以使用冒泡排序、快速排序等算法来解决。以下是一种简单的冒泡排序的实现代码示例:
```
#include <stdio.h>
#include <string.h>
typedef struct {
int id;
char name[20];
int score;
} Student;
void bubble_sort(Student s[], int n) {
int i, j;
Student temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (s[j].score < s[j+1].score) {
// 交换
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
}
int main() {
Student students[5] = {
{1, "Tom", 80},
{2, "Jerry", 90},
{3, "Mike", 70},
{4, "Bob", 85},
{5, "Lucy", 95},
};
int i;
// 排序前
printf("排序前:\n");
for (i = 0; i < 5; i++) {
printf("%d %s %d\n", students[i].id, students[i].name, students[i].score);
}
// 排序
bubble_sort(students, 5);
// 排序后
printf("排序后:\n");
for (i = 0; i < 5; i++) {
printf("%d %s %d\n", students[i].id, students[i].name, students[i].score);
}
return 0;
}
```
这里定义了一个结构体类型,包含学号、姓名、成绩三个字段。使用冒泡排序算法对该结构体数组进行排序,先按照成绩从高到低排序,相同成绩再按照学号从小到大排序。最后输出排序结果。