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

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

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

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

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

输入样例:

  1. 3
  2. Joe Math990112 89
  3. Mike CS991301 100
  4. Mary EE990830 95

输出样例:

  1. Mike CS991301
  2. Joe Math990112

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

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct Student{
  5. char name[];
  6. char num[];
  7. int score;
  8. }Student;
  9. Student student[];
  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=; i<n; i++)
  26. scanf("%s %s %d",student[i].name,student[i].num,&student[i].score);
  27. qsort( student,n,sizeof(student[]),cmp);
  28. printf("%s %s\n",student[].name,student[].num);
  29. printf("%s %s\n",student[n-].name,student[n-].num);
  30. return ;
  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[];
  15. scanf("%d",&n);
  16. for( i=; i<n; i++)
  17. scanf("%d",&student[i]);
  18. qsort( student,n,sizeof(student[]),cmp);
  19. printf("%d\n",student[]);
  20. printf("%d\n",student[n-]);
  21. return ;
  22. }

对结构体二级排序 

  1. struct In
  2. {
  3. int x;
  4. int y;
  5. } s[];
  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,,sizeof(s[]),cmp);

对字符串进行排序 

  1. struct In
  2. {
  3. int data;
  4. char str[];
  5. } s[];
  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,,sizeof(s[]),cmp);

对double型进行排序(double型要用三目运算符,不能像int那样直接相减)

  1. double in[];
  2.  
  3. int cmp( const void *a , const void *b )
  4. {
  5. return *(double *)a > *(double *)b ? : -;
  6. }
  7.  
  8. qsort(in,,sizeof(in[]),cmp);

1004. 成绩排名 (20) (快速排序qsort函数的使用问题)的更多相关文章

  1. 【PAT】1004. 成绩排名 (20)

    1004. 成绩排名 (20) 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 ...

  2. PAT乙级 1004. 成绩排名 (20)

    1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...

  3. PAT-乙级-1004. 成绩排名 (20)

    1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...

  4. [C++]PAT乙级1004. 成绩排名 (20/20)

    /* 1004. 成绩排名 (20) 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生 ...

  5. PAT 1004 成绩排名 (20)(代码)

    1004 成绩排名 (20)(20 分) 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为\ 第1行:正整数n 第2行:第1 ...

  6. PATB 1004 成绩排名 (20)

    1004. 成绩排名 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入n名学生的姓名.学号.成绩,分 ...

  7. PAT (Basic Level) Practise (中文)- 1004. 成绩排名 (20)

    http://www.patest.cn/contests/pat-b-practise/1004 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入 ...

  8. PAT 1004. 成绩排名 (20)

    读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生 ...

  9. PAT 1004. 成绩排名 (20) JAVA

    读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生 ...

随机推荐

  1. 173 Binary Search Tree Iterator 二叉搜索树迭代器

    实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器.调用 next() 将返回二叉搜索树中的下一个最小的数.注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 ...

  2. Java开发笔记(九十三)深入理解字节缓存

    前面介绍了文件通道的读写操作,其中用到字节缓存ByteBuffer,它是位于通道内部的存储空间,也是通道唯一可用的存储形式.ByteBuffer有两种构建方式,一种是调用静态方法wrap,根据输入的字 ...

  3. P1118 [USACO06FEB]数字三角形Backward Digit Su…

    题目描述 FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N ...

  4. CSS3实现边框线条动画特效

    <div class="box-line"></div> CSS代码 .box-line, .box-line::before, .box-line::af ...

  5. iOS Programming UIStoryboard 故事板

    iOS Programming UIStoryboard In this chapter, you will use a storyboard instead. Storyboards are a f ...

  6. R in action读书笔记(2)-第五章:高级数据管理(下)

    5.4 控制流  语句(statement)是一条单独的R语句或一组复合语句(包含在花括号{ } 中的一组R语 句,使用分号分隔):  条件(cond)是一条最终被解析为真(TRUE)或假(FAL ...

  7. 将php中session存入redis中

    PHP 的会话默认是以文件的形式存在的,可以配置到 Redis 中,即提高了访问速度,又能很好地实现会话共享! 配置方式如下: 方法一:修改 php.ini 的设置 session.save_hand ...

  8. vue2.0版本指令v-if与v-show的区别

    v-if: 判断是否加载,可以减轻服务器的压力,在需要时加载. v-show:调整css dispaly属性,可以使客户端操作更加流畅. v-if示例: <!DOCTYPE html> & ...

  9. bat批处理如何删除本地策略里的用户权限分配中的拒绝从网络访问本机项的guest用户?

    echo [Version]>mm.inf echo signature="$CHICAGO$">>mm.inf echo Revision=1>>m ...

  10. ubuntu15.04安装 RVM

    首先,请参考这篇文章 https://ruby-china.org/wiki/rvm-guide RVM 官方网站 https://rvm.io/ 1 由于现在很多网站都转向https链接,所以,根据 ...