qsort结构体排序_C语言 — 结构体快排算法

本文介绍了如何使用C语言中的qsort函数对结构体数组进行排序。qsort函数需要配合自定义的比较函数来确定排序规则,通过指定的指针函数判断元素大小。文中提供了一个代码示例,详细解释了qsort函数的参数含义和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qsort函数介绍:

qsort函数stdlib.h文件中,函数原型为

void qsort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *));

*base 为要排序的数组

nelem 为要排序的数组的长度

width 为数组元素的大小(一字节为单位)

默认是从小到大排序的!

(* Comp)(const void *p1,const void *p2) 为判断大小函数的指针,这个函数需要自己定义,如果p1>p2,函数返回-1;a

a63e7308075e3d1d507fda9d3ebae58f.png

代码示例:

#include#include#includestruct Stu{  char name[100];  //名字   char xue[100];  //学号   int c;      //成绩 }stu[10010];int comp(const void* a,const void* b){  struct Stu *aa = (struct Stu *)a;  struct Stu *bb = (struct Stu *)b;  return ((aa->c)-(bb->c));    //aa->c为结构体的成员,bb->c也为结构体的成员 }int main(){  int n;  int i,j;  scanf("%d",&n);  getchar();  for(i=0;i  {    scanf("%s%s%d",&stu[i].name,&stu[i].xue,&stu[i].c);  }  printf("\n");  qsort(stu,n,sizeof(stu[0]),comp);  //参数1:结构体数组名,个数,首地址的字符数,自定义比较函数名   for(i=0;i  printf("%s %s %d\n",stu[i].name,stu[i].xue,stu[i].c);  return 0;}

详细:

库函数函数原型:void qsort(void *buf, size_t num, size_t size, int ( * compare)( const void *, const void *));函数说明:对buf指向对数据(包含num项,每项的大小为size)进行快速排序。void *buf:无类型指针,如果要排序一个数组,则为指向数组第一个数据的指针;size_t num:要排序的数据的项数,可理解为待排数组的元素个数;size_t size:待排数据每项的大小,以字节Byte为单位;int ( * compare)( const void *, const void *):“函数指针”,用户自定义函数,函数名为compare,const void *:无类型常量指针,可以指向任意类型的数据,但是必须为常量。compare函数规定待排数组的排序规则 :a. 如果函数compare的第一个参数排在第二个前面,返回负值;b. 如果函数compare的第一个参数和第二个位置不要求,返回零值;c. 如果函数compare的第一个参数排在第二个后面,返回正值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值