qsort是c中的排序函数,虽然要自己写比较函数,但是也还挺简单的
有一点需要注意的是,结构体的排序是可以直接排一个数据导致结构体排序的,所以大大减少了工作量
有些编译器对这样的指针结构体代码不是很支持,用c++编译的话可以减少出错的可能
#include<stdio.h>
#include<stdlib.h>
struct stu{
char name[10];
int sum;
};//定义结构体类型
int comp(const void *p1,const void *p2){
struct stu *c = (struct stu*)p1;
struct stu *d = (struct stu*)p2;
//相当于把结构体传了过去,再取里面的参数
//比较时用结构体声明新的指针变量
return c->sum - d->sum;//这是从大到小,从小到大是d->sum - return c->sum
//交换
}
int main(){
int b;
while(~scanf("%d",&b)){
struct stu a[b+1];
int summ = 0;
for(int i = 0;i < b;i++){
scanf("%s %d",a[i].name,&a[i].sum);
}
qsort(a,b,sizeof(stu),comp);//第一位是待排序的数组,第二位是排序数,第三位是每个排序单位的大小,第四个是规则
for(int i = 0;i < b;i++){
printf("%s %d\n",a[i].name,a[i].sum);
}
}
return 0;
}
输入:
3
Xiaoming 88
Dayu 79
Qingqing 99
输出:
Qingqing 99
Xiaoming 88
Dayu 79