手撕qsort函数
前言
本篇主要讲解的是qsort函数细节以及运用实例。
紧跟我的脚步一起手撕qsort函数吧~
欢迎关注个人主页:逸狼
更多优质内容:
拿捏c语言指针(上)
拿捏c语言指针(中)
拿捏c语言指针(下)
创造不易,可以点点赞吗~
如有错误,欢迎指出~
qsort函数介绍
qsort 函数可以实现任意数据的排序
他的底层排序算法是快速排序,对应的头文件是string.h
我们在官网cplusplus中搜索 qsort函数 得到如图 参数 和 compar函数的返回值

参数解释
base
void* base
base指向要排序数组的第一个元素(起始位置),void*是为了接收不同类型的数据
numnum 的返回类型是size_t
base指向的数组的元素个数(待排序的数组的元素个数)
size
size 的返回类型是size_t
base指向的数组的元素的大小(单位是字节)
compar
int (*compar)(const void*p1, const void*p2))函数的返回类型是int,他有两个参数分别是const void*p1和const void*p2,void*是为了接收不同类型的数据,return返回时要 强制类型转化 为 被比较的数据的类型。
(*compar)是函数指针,该指针指向的函数是用来比较数组中的2个元素的,p1和p2分别指向两个不同的元素
compar函数是根据实际要比较的数据自己写的
应用qsort实现排序整形
利用qsort实现排序整形数组
//利用qsort实现排序整形数组
#include<stdio.h>
#include<stdlib.h>
int cmp_int(const void*p1,const void *p2)
{return *(int*)p1 - *(int*)p2;//(int*)是强制类型转换为int*类型
}
int main()
{int arr[10] = { 9,4,6,1,0,3,7,2,5,8 };int sz = sizeof(arr) / sizeof(arr[0]);//排序前打印for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");qsort(arr, sz, sizeof(arr[0]), cmp_int);//排序后打印for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}
代码结果

应用qsort实现排序结构体
排年龄
将年龄排成升序
//利用qsort实现排序结构体数据
#include<stdio.h>
#include<stdlib.h>
//定义一个结构体
struct Stu
{char name[20];//名字int age;//年龄
};
//不能直接使用< > ==比较
//
//1.按照年龄比较
int cmp_by_age(const void* p1, const void* p2)
{return ((struct Stu*)p1)->age -((struct Stu*)p2)->age;// (struct Stu*)代表将p1和p1强制类型转化为结构体指针类型
}
void test()
{struct Stu arr[] = { {"zs",66},{"ls",18},{"ww",35} };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_by_age);
}int main()
{//年龄排成升序test();return 0;
}
调试结果
未排序前
排序完成
排名字
将名字排成升序
//2.按照名字比较
int cmp_by_name(const void* p1, const void* p2)
{return strcmp(((struct Stu*)p1)->name , ((struct Stu*)p2)->name);// (struct Stu*)代表将p1和p1强制类型转化为结构体指针类型
}
void test()
{struct Stu arr[] = { {"zhangsan",66},{"lisi",18},{"wangwu",35} };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_by_name);
}int main()
{//名字排成升序test();return 0;
}
库函数strcmp
其中,比较名字(实际上是比字符串大小)
这里需要运用库函数strcmp(对应的头文件是string.h)比较字符串大小(是按照对应位置上字符的ASCII值的大小比较的)
strcmp的返回值与qsort函数的返回值一致
调试结果
相关文章:
手撕qsort函数
前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注个人主页:逸狼 更多优质内容: 拿捏c语言指针(上) 拿捏c语言指针(中) 拿捏c语言指针(下&…...
项目在linux上的简单部署
本文章只介绍项目的简单部署,暂时没有Docker部署。 项目部署有两种方式,一种是直接命令部署,第二种是用脚本,脚本本身也是将命令进行封装来执行。 命令 项目通过maven打包,启动命令: # 启动命令 nohup …...
MySQL安装教程(详细版)
今天分享的是Win10系统下MySQL的安装教程,打开MySQL官网,按步骤走呀~ 宝们安装MySQL后,需要简单回顾一下关系型数据库的介绍与历史(History of DataBase) 和 常见关系型数据库产品介绍 呀,后面就会进入正式…...
Linux platform tree下的单总线驱动程序设计(DHT11)
目录 概述 1 认识DHT11 1.1 DHT11特性 1.2 DHT11数据格式 1.3 DHT11与MCU通信 1.4 DHT11信号解析 1.4.1 起始信号 1.4.2 解析信号0 1.4.3 解析信号1 2 驱动开发 2.1 硬件接口 2.2 更新设备树 2.2.1 添加驱动节点 2.2.2 编译.dts 2.2.3 更新板卡中的.dtb 2.3 驱…...
自研爬虫框架的经验总结(理论及方法)
背景: 由于业务需要,承接一部分的数据采集工作。目前市场内的一些通用框架不太适合。故而进行了自研。 对比自研和目前成熟的框架,自研更灵活适配,可以自己组装核心方法;后者对于新场景的适配需要对框架本身有较高的理…...
配置基于 AWS CRT 的 HTTP 客户端
基于 AWS CRT 的 HTTP 客户端包括同步 AwsCrtHttpClient 和异步 AwsCrtAsyncHttpClient。基于 AWS CRT 的 HTTP 客户端具有以下 HTTP 客户端优势: 更快的 SDK 启动时间 更小的内存占用空间 降低的延迟时间 连接运行状况管理 DNS 负载均衡 SDK 中基于 AWS CRT …...
挑战杯 基于LSTM的天气预测 - 时间序列预测
0 前言 🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/po…...
我为什么不喜欢关电脑?
程序员为什么不喜欢关电脑? 你是否注意到,程序员们似乎从不关电脑?别以为他们是电脑上瘾,实则是有他们自己的原因!让我们一起揭秘背后的原因,看看程序员们真正的“英雄”本色! 一、上大学时。 …...
Unity【角色/摄像机移动控制】【1.角色移动】
本文主要总结实现角色移动的解决方案。 1. 创建脚本:PlayerController 2. 创建游戏角色Player,在Player下挂载PlayerController脚本 3. 把Camera挂载到Player的子物体中,调整视角,以实现相机跟随效果 3. PlayerController脚本代码…...
Oracle12cR2之Job定时作业调度器详解
Oracle12cR2之Job定时作业调度器详解 文章目录 Oracle12cR2之Job定时作业调度器详解1.Oracle Job1. 关于Job2. 使用方法 2. Job详细说明1. 查看Job的相关视图2.SYS.DBA_JOBS视图字段详细说明 3. 创建及查看Job1. 创建Job2. 查看运行中的Job 1.Oracle Job 1. 关于Job 在 Oracle…...
python自学...
一、稍微高级一点的。。。 1. 闭包(跟js差不多) 2. 装饰器 就是spring的aop 3. 多线程...
Message Pack 协议详解及应用
文章目录 一、Message Pack是什么二、Message Pack的语法规则三、Message Pack相关链接四、Message Pack应用场景五、MessagePack 兼容性与特点 一、Message Pack是什么 Message Pack是一种高效的二进制序列化格式,用于在不同的应用程序之间进行数据交换。它类似于J…...
智慧社区管理系统:构建未来的生活模式
在这个信息化、智能化的时代,我们期待的不再是简单的居住空间,而是一个集安全、便捷、舒适、环保于一体的智能化社区。为此,我们推出了全新的智慧社区管理系统,旨在将先进的科技力量引入社区管理,为居民提供更优质的生…...
Rocky 8.9 Kubespray v2.24.0 在线部署 kubernetes v1.28.6 集群
文章目录 1. 简介2. 预备条件3. 基础配置3.1 配置hostname3.2 配置互信 4. 配置部署环境4.1 在线安装docker4.2 启动容器 kubespray4.3 编写 inventory.ini4.4 关闭防火墙、swap、selinux4.5 配置内核模块 5. 部署6. 集群检查 1. 简介 kubespray 是一个用于部署和管理 Kuber…...
新版AI系统ChatGPT源码支持GPT-4/支持AI绘画去授权
源码获取方式 搜一搜:万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新,会陆续更新上 新版AI系统ChatGPT网站源码支持GPT-4/支持AI绘画/Prompt应用/MJ绘画源码/PCH5端/免授权,支持关联上下文,意间绘画模型…...
学习鸿蒙基础(5)
一、honmonyos的page路由界面的路径 新建了一个page,然后删除了。运行模拟器的时候报错了。提示找不到这个界面。原来是在路由界面没有删除这个page。新手刚接触找了半天才找到这个路由。在resources/base/profile/main_pages.json 这个和微信小程序好类似呀。 吐槽…...
Tuxera NTFS2024最新中文版支持M1/M2/M3苹果全系机型
Tuxera NTFS的传输速度会受到多种因素的影响,包括硬件配置、文件大小、存储设备的性能等。因此,无法给出具体的传输速度数值。 不过,根据一些用户的使用经验和测试数据,Tuxera NTFS的传输速度通常都非常快,能够满足大…...
【Python】OpenCV-图片添加水印处理
图片添加水印处理 1. 引言 图像处理中的水印添加是一种常见的操作,用于在图片上叠加一些信息或标识。本文将介绍如何使用OpenCV库在图片上添加水印,并通过详细的代码注释来解释每一步的操作。 2. 代码示例 以下是一个使用OpenCV库的简单代码示例&…...
Milvus数据库介绍
参考:https://www.xjx100.cn/news/1726910.html?actiononClick Milvus 基于FAISS、Annoy、HNSW 等向量搜索库构建,核心是解决稠密向量相似度检索的问题。在向量检索库的基础上,Milvus 支持数据分区分片、数据持久化、增量数据摄取、标量向量…...
notepad++的下载与使用
1.进入官网下载 https://notepad-plus-plus.org/ 点击下载即可 2.选择中文简体 3.建议安装在D盘 其余步骤按照指示就行 4.安装后这几个是必选的 设置完成后就可以写中文了 以此为例 结果为...
vscode+stm32+embedded ide+cortex debug+gcc
用stm32cubemx生成项目。下载三个软件,设置环境变量 openocd是仿真用,gcc-arm-none-eabi-10.3是编译用,w64evkit只用其中的make.exe根据生成的makefile文件,添加c源文件,包含目录,startup文件&#…...
API网关设计与实现完全指南
API网关设计与实现完全指南 前言 API网关是微服务架构中的统一入口,负责请求路由、负载均衡、安全认证、限流熔断等功能。一个设计良好的API网关可以极大地简化微服务架构的复杂度,提升系统的可维护性和安全性。本文将详细介绍API网关的设计理念、核心功…...
深度解析OBS Mac虚拟摄像头插件的架构设计与性能优化
深度解析OBS Mac虚拟摄像头插件的架构设计与性能优化 【免费下载链接】obs-mac-virtualcam ARCHIVED! This plugin is officially a part of OBS as of version 26.1. See note below for info on upgrading. 🎉🎉🎉Creates a virtual webcam…...
Unity日志语义分析工具:Editor Console Pro深度解析
1. 这不是“换个皮肤”——Editor Console Pro 解决的是 Unity 开发中被长期忽视的“信息过载失能症”你有没有过这样的时刻:刚点下 Play,控制台瞬间炸出 200 行日志,红色错误、黄色警告、蓝色调试信息混作一团;你盯着屏幕三秒&am…...
从Linux内核list.h到用户态:侵入式单向链表的设计与实现
1. 项目概述:从内核到应用,list.h的降维打击如果你在Linux内核源码里泡过,或者看过一些高性能的开源项目,一定对list.h这个文件不陌生。它位于内核源码的include/linux/目录下,是一个用C语言实现的、精巧绝伦的通用双向…...
为什么你的DeepSeek推理延迟飙升300%?GPU显存碎片化诊断与TensorRT加速实录
更多请点击: https://codechina.net 第一章:DeepSeek推理延迟飙升300%的根因定位 在一次线上A/B测试中,DeepSeek-R1-7B模型的P99推理延迟从平均320ms骤升至1280ms,增幅达300%。该异常首先被PrometheusGrafana告警链捕获ÿ…...
带标注的焊接型球头杆端关节轴承(鱼眼接头)缺陷识别数据集,识别率99.1%,可识别卡死,锈迹,合格,凹痕缺陷,20580张图,支持yolo,coco json,voc xml,文末有模型训练代码
带标注的焊接型球头杆端关节轴承(鱼眼接头)缺陷识别数据集,识别率99.1%,可识别卡死,锈迹,合格,凹痕缺陷,20580张图,支持yolo,coco json,voc xml,文末有模型训练代码 …...
抖音批量下载助手:高效构建个人视频素材库的完整解决方案
抖音批量下载助手:高效构建个人视频素材库的完整解决方案 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 在内容创作成为主流表达方式的今天,视频素材的获取和管理成为创作者面临的核…...
企业级应用如何通过Taotoken聚合API管理多个大模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何通过Taotoken聚合API管理多个大模型调用 在构建企业级AI应用时,一个常见的需求是同时接入多个不同厂商的…...
5分钟搞定百度网盘限速:baidu-wangpan-parse全功能指南
5分钟搞定百度网盘限速:baidu-wangpan-parse全功能指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的限速而烦恼吗?想下载大文件却只…...




