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


    读入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
    ",student[0].name,student[0].num);
    29     printf("%s %s
    ",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
    ",student[0]);
    20     printf("%d
    ",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);

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

     1 double in[100];
     2 
     3 
     4 int cmp( const void *a , const void *b )
     5 {
     6       return *(double *)a > *(double *)b ? 1 : -1;
     7 }
     8 
     9 
    10 qsort(in,100,sizeof(in[0]),cmp);
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    nginx配置404
    js修改浏览器url
    mysql DATE_ADD DATE_SUB
    centos6.5 ssh安全优化,修改默认端口名,禁止root远程登录
    关于mysql varchar 类型的最大长度限制
    IIS7多域名绑定同一物理目录,设置不同默认文档的解决方案
    获取某个数据所在数据列表中的行数 mysql
    安全模式不能删除使用SET SQL_SAFE_UPDATES = 0;
    Failed to run the WC DB work queue associated with 错误的解决
    mysql正则匹配解决查询一个字段是否在另一个字段中
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8425769.html
Copyright © 2020-2023  润新知