首页 > 其他分享 >使用库函数qsort

使用库函数qsort

时间:2023-02-02 14:06:24浏览次数:36  
标签:const struct int void qsort stu 使用 sizeof 库函数

先在MSDN上了解一下qsort的大致内容。

void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

第一个参数是待排序数组的首元素地址,第二个参数是待排序数组的元素个数,第三个数组是待排序数组的每个元素的大小(单位字节),第四个参数是一个函数指针,比较两个元素所用函数的地址。这个函数要自己实现,大于返回大于0的数字,等于返回0,小于返回一个小于0的数字。

今天实现一下结构体排序。

#include<stdlib.h>
#include<string.h>
//结构体的声明要放在使用的前面,不然会报错
struct stu
{
char name[20];
int age;
};

int cmp_stu_name(const void* e1,const void* e2)
{
return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}

void test1()
{
struct stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_name);
}//按ASCII排序

int cmp_stu_age(const void* e1, const void* e2)
{
return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
}

void test2()
{
struct stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
int sz = sizeof(s) / sizeof(s[0]);
//运行到下面这个函数的时候不要按F11,会出错
//按F10就可以了
//在监视里面可以观察到数组的变化
qsort(s, sz, sizeof(s[0]), cmp_stu_age);
}

int main()
{
test2();
test1();
return 0;
}

刚从B站学完出来,怕忘了,趁着印象还深,先在这里存着,有时间再复习。

标签:const,struct,int,void,qsort,stu,使用,sizeof,库函数
From: https://blog.51cto.com/u_15736615/6033519

相关文章

  • 创建函数替代qsort函数
    #include<stdio.h>voidswap(char*p1,char*p2,intwidth){intn=0;for(n=0;n<width;n++){chartmp=*p1;*p1=*p2;*p2=tmp;p1++;......
  • spl_autoload_register的使用
    classLoader{staticfunctionloadClass($class){$class=$class.'.php';if(file_exists($class)){include($class);return;}}}spl_au......
  • python数据持久存储:pickle模块的使用
    python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们......
  • (笔记)NTP使用常见问题记录
     一、ntpd&ntpdate  我的两台虚拟机,使用135作为ntp服务器,138以135为准同步时间。version:4.2.6p5ntpd服务是按照一定时间来同步,而ntpdate是立即同步,但是二者都......
  • RabbitMQ使用
    记录学习【江南一点雨】的Rabbitmq笔记1.概览1.1通信协议1.1.1JMS(JavaMessageService)类似于JDBC,不同于JDBC,JMS是Javaee的消息服务接口。1.1.1.1JMS模型两......
  • 使用EB配置PWM驱动
    概述脉宽调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器引擎是一个GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。......
  • 使用Postman调用Dynamics CRM Web API (OAuth2.0)
    1.在Azure注册应用(1)登录https://portal.azure.com/(2)新建应用(3)注册应用重定向URI选择Web并填写http://localhost(4)修改清单配置(仔细点)打开清单配置后,修改allowPublic......
  • 实战:第十九章:存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误
    使用雪花算法随机生成的id,使用Long类型存储到redis的时候,反序列化为Object类型,对于数值类型,取出后统一转为Object,导致泛型类型丢失,数值自动转为了Integer类型,rangeofint......
  • CentOS使用 yum 安装 Redis
    1.下载fedora的epel仓库yuminstallepel-release2.安装redisyuminstallredis3.查看redis状态安装完毕后需要启动#启动redisserviceredisstart#停止rediss......
  • React 中ref 的使用
    场景:类组件、函数组件、forwardRef、useImperativeHandle 详解 前言在一个父组件中,我们想要获取到其中的节点元素或者子组件实例,从而直接调用其上面的方法。Class......