首页 > 代码库 > C语言 · 运用结构体的排序方法
C语言 · 运用结构体的排序方法
之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计、名次排序之类的题目了。
首先头文件(基于大牛的方法,本人之后做题喜欢引入题目中常用的五个头文件)
#include<stdlib.h> #include<string.h>
定义结构体:
/*定义一个结构体*/ 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<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 /*定义一个结构体*/ 5 typedef struct Stu{ 6 char name[10]; 7 int id; 8 int score; 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 return strcmp(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 int n; 26 stu st[10]; 27 scanf("%d",&n); 28 for(int i=0;i<n;i++){ 29 scanf("%s %d %d",st[i].name,&st[i].id,&st[i].score); 30 } 31 qsort(st,n,sizeof(st[0]),cmp); 32 for(int i=0;i<n;i++){ 33 printf("%s %d %d\n",st[i].name,st[i].id,st[i].score); 34 } 35 }
C语言 · 运用结构体的排序方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。