定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,
程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果。
输入格式:第一行是一个整数N(N<),表示元素个数;接下来N行每行描述一个元素,姓名、性别都是长度不超过20的字符串,年龄和成绩都是整型。
输出格式:按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序。
输入:
Alice female
Bob male
Miller male 输出:
Bob male
Miller male
Alice female
记:
题目给出了用冒泡排序实现,但是冒泡排序会破坏当成绩相同时学生的排序
故使用插入排序
AC代码:
#include <stdio.h>
#define MAX 1000 typedef struct student
{
char name[+];
char gender[+];
int age;
int score;
}student; int main(void)
{
int i,j;
int n;
student stu[MAX+];
student tmp; /*初始化*/
scanf("%d",&n);
for (i = ; i <= n ; i ++)
{
scanf("%s %s %d %d",&stu[i].name,&stu[i].gender,&stu[i].age,&stu[i].score);
} /*插入排序*/
for (i = ; i <= n ; i ++)
{
tmp = stu[i];
for (j = i ; j> && tmp.score < stu[j-].score ; j --)
{
stu[j] = stu[j-];
}
stu[j] = tmp;
} /*结果输出*/
for (i = ; i <= n ; i ++)
{
printf("%s %s %d %d\n",stu[i].name,stu[i].gender,stu[i].age,stu[i].score);
} return ;
}