读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含1个测试用例,格式为
第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生的姓名 学号 成绩 ... ... ... 第n+1行:第n个学生的姓名 学号 成绩
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。
输入样例:
3Joe Math990112 89Mike CS991301 100Mary EE990830 95
输出样例:
Mike CS991301Joe Math990112
解题思路:qsort是C语言自带的快速排序函数,使用qsort速度上会快很多
1 #include2 #include 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
以上是题目的解,是结构体的,下面再补充几个算法
对整型进行排序
1 #include2 #include 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
对结构体二级排序
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);