定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,
程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果。 输入格式:第一行是一个整数N(N<1000),表示元素个数;接下来N行每行描述一个元素,姓名、性别都是长度不超过20的字符串,年龄和成绩都是整型。 输出格式:按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序。 输入: 3 Alice female 18 98 Bob male 19 90 Miller male 17 92 输出: Bob male 19 90 Miller male 17 92 Alice female 18 98
记:
题目给出了用冒泡排序实现,但是冒泡排序会破坏当成绩相同时学生的排序
故使用插入排序
AC代码:
1 #include <stdio.h> 2 #define MAX 1000 3 4 typedef struct student 5 { 6 char name[20+1]; 7 char gender[20+1]; 8 int age; 9 int score; 10 }student; 11 12 int main(void) 13 { 14 int i,j; 15 int n; 16 student stu[MAX+1]; 17 student tmp; 18 19 /*初始化*/ 20 scanf("%d",&n); 21 for (i = 1 ; i <= n ; i ++) 22 { 23 scanf("%s %s %d %d",&stu[i].name,&stu[i].gender,&stu[i].age,&stu[i].score); 24 } 25 26 /*插入排序*/ 27 for (i = 2 ; i <= n ; i ++) 28 { 29 tmp = stu[i]; 30 for (j = i ; j>1 && tmp.score < stu[j-1].score ; j --) 31 { 32 stu[j] = stu[j-1]; 33 } 34 stu[j] = tmp; 35 } 36 37 /*结果输出*/ 38 for (i = 1 ; i <= n ; i ++) 39 { 40 printf("%s %s %d %d\n",stu[i].name,stu[i].gender,stu[i].age,stu[i].score); 41 } 42 43 return 0; 44 }