C语言结构的图书信息去重,C语言 · 运用结构体的排序方法

之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计、名次排序之类的题目了。

首先头文件(基于大牛的方法,本人之后做题喜欢引入题目中常用的五个头文件)

#include

#include

定义结构体:

/*定义一个结构体*/

typedef struct Stu{

char name[10];

int id;

int score;

}stu;

注释:最后一行stu是别名。

定义排序(回调)函数:

/*定义排序函数*/

int cmp(const void *a,const void *b){

stu c = *(stu*)a;

stu d = *(stu*)b;

//printf("%d\n",strcmp(c.name,d.name));

if(strcmp(c.name,d.name)>0){/*返回值是0、1*/

return strcmp(c.name,d.name);

}

else{

if(strcmp(c.name,d.name)==0){

return c.id-d.id;

}

}

}

或者:

int cmp(const void *c,const void *d){

return *(int *)c - *(int *)d;

}

使用qsort函数:

qsort(st,n,sizeof(st[0]),cmp);

头文件:stdlib.h

用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

参数:

1 :待排序数组首地址;

2 :数组中待排序元素数量;

3 :各元素的占用空间大小;

4 :指向函数的指针,用于确定排序的顺序.

下面给出一个成绩排序程序的完整代码:

1 #include

2 #include

3 #include

4 /*定义一个结构体*/

5 typedef structStu{6 char name[10];7 intid;8 intscore;9 }stu;10 /*定义排序函数*/

11 int cmp(const void *a,const void *b){12 stu c = *(stu*)a;13 stu d = *(stu*)b;14 printf("%d\n",strcmp(c.name,d.name));15 if(strcmp(c.name,d.name)>0){16 returnstrcmp(c.name,d.name);17 }18 else{19 if(strcmp(c.name,d.name)==0){20 return c.id-d.id;21 }22 }23 }24 main(){25 intn;26 stu st[10];27 scanf("%d",&n);28 for(int i=0;i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值