码迷,mamicode.com
首页 > 其他好文 > 详细

1004. 成绩排名 (20) (qsort函数的使用问题)

时间:2018-02-07 14:38:13      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:学生   字符   n+1   相同   成绩   const   printf   amp   快速排序   

读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:每个测试输入包含1个测试用例,格式为

  第1行:正整数n
  第2行:第1个学生的姓名 学号 成绩
  第3行:第2个学生的姓名 学号 成绩
  ... ... ...
  第n+1行:第n个学生的姓名 学号 成绩

其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

 

输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。

输入样例:

3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95

输出样例:

Mike CS991301
Joe Math990112

 解题思路:qsort是C语言自带的快速排序函数,使用qsort速度上会快很多

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef struct Student{
 5     char name[11];
 6     char num[11];
 7     int  score;
 8 }Student;
 9 Student student[1001];
10 
11 int cmp( const void *a,const void *b)
12 {
13 
14     Student *c=(Student*)a;
15     Student *d=(Student*)b;
16     return  d->score-c->score;  //从大到小排序
17 //    return  c->score-d->score;  //从小到大排序
18 }
19 
20 int main()
21 {
22     int n,flag;
23     int i;
24     scanf("%d",&n);
25     for( i=0; i<n; i++)
26             scanf("%s %s %d",student[i].name,student[i].num,&student[i].score);
27     qsort( student,n,sizeof(student[0]),cmp);
28     printf("%s %s\n",student[0].name,student[0].num);
29     printf("%s %s\n",student[n-1].name,student[n-1].num);
30     return 0;
31 }

 

以上是题目的解,是结构体的,下面再补充几个算法

对整型进行排序

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int cmp( const void *a,const void *b)
 5 {
 6 
 7     return  *(int *)a - *(int *)b;  //从小到大排序
 8 }
 9 
10 int main()
11 {
12     int n;
13     int i;
14     int student[1001];
15     scanf("%d",&n);
16     for( i=0; i<n; i++)
17             scanf("%d",&student[i]);
18     qsort( student,n,sizeof(student[0]),cmp);
19     printf("%d\n",student[0]);
20     printf("%d\n",student[n-1]);
21     return 0;
22 }

 

对结构体二级排序 

 

 1 struct In
 2 {
 3     int x;
 4     int y;
 5 } s[100];
 6 
 7 //按照x从小到大排序,当x相等时按照y从大到小排序
 8 
 9 int cmp( const void *a, const void *b )
10 {
11     struct In *c = (In *)a;
12     struct In *d = (In *)b;
13     if(c->x != d->x) return c->x - d->x;
14     else return d->y - c->y;
15 }
16 
17 qsort(s,100,sizeof(s[0]),cmp);


对字符串进行排序 

 1 struct In
 2 {
 3     int data;
 4     char str[100];
 5 } s[100];
 6 
 7 //按照结构体中字符串str的字典顺序排序
 8 
 9 int cmp ( const void *a, const void *b )
10 {
11     return strcmp( (*(In *)a)->str, (*(In *)B)->str );
12 }
13 
14 qsort(s,100,sizeof(s[0]),cmp);

 

1004. 成绩排名 (20) (qsort函数的使用问题)

标签:学生   字符   n+1   相同   成绩   const   printf   amp   快速排序   

原文地址:https://www.cnblogs.com/yuxiaoba/p/8425769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!