119.【C语言】数据结构之快速排序(调用库函数)
目录
1.C语言快速排序的库函数
1.使用qsort函数前先包含头文件
2.qsort的四个参数
3.qsort函数使用
对int类型的数据排序
运行结果
对char类型的数据排序
运行结果
对浮点型数据排序
运行结果
2.题外话:函数名的本质
1.C语言快速排序的库函数
cplusplus网的介绍 https://legacy.cplusplus.com/reference/cstdlib/qsort/?kw=qsort

解释:
1.使用qsort函数前先包含头文件<stdlib.h>
2.qsort的四个参数
base:指向要排序的数组(即数组名)
num:数组元素的个数(类型size_t)
size:每个元素所占的空间(类型size_t)
compare:比较函数,用于比较数组的两个元素(这个参数有点特殊,之前没有见过:函数本身也可以作为另一个函数的参数)
函数没有返回值(void类型)
网站给出比较函数应该遵照的原型:int compar (const void* p1, const void* p2);
注意到比较函数的返回类型为int(显然有三种情况,负数,0和正数)
负数 0 正数 *p1<*p2 *p1==*p2 *p1>*p2
网站给出比较函数的写法
int compareMyType (const void * a, const void * b) {if ( *(MyType*)a < *(MyType*)b ) return -1;if ( *(MyType*)a == *(MyType*)b ) return 0;if ( *(MyType*)a > *(MyType*)b ) return 1; }由于a是void*类型的,使用前应该强制类型转换为MyType类型,之后再解引用
3.qsort函数使用
对int类型的数据排序
#include <stdlib.h>
int compare(const void* a, const void* b)
{if (*(int*)a < *(int*)b) return -1;if (*(int*)a == *(int*)b) return 0;if (*(int*)a > *(int*)b) return 1;
}int main()
{int arr[] = { 3,5,1,6,2,3,9,0,8 };printf("排序前:");PrintArray(arr, sizeof(arr) / sizeof(arr[0]));qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), compare);printf("排序后:");PrintArray(arr, sizeof(arr) / sizeof(arr[0]));return 0;
}
备注:如果要排降序,compare函数有两种改法①将compare的返回值-1和1交换即可 ②或者将>和<交换
运行结果

对char类型的数据排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* a, const void* b)
{if (*(char*)a < *(char*)b) return -1;if (*(char*)a == *(char*)b) return 0;if (*(char*)a > *(char*)b) return 1;
}int main()
{char arr[] = { "aoxhfekmc"};printf("排序前:");printf("%s", arr);qsort(arr, sizeof(arr) / sizeof(arr[0])-1, sizeof(char), compare);printf("\n排序后:");printf("%s", arr);return 0;
}
运行结果

对浮点型数据排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void* a, const void* b)
{if (*(float*)a < *(float*)b) return -1;if (*(float*)a == *(float*)b) return 0;if (*(float*)a > *(float*)b) return 1;
}int main()
{float arr[] = { 3.1,5.4,7.9,10.31,6.66,1.1,0.9 };printf("排序前:");for (int i = 0;i < sizeof(arr) / sizeof(arr[0]); i++)printf("%.2f ", arr[i]);qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(float), compare);printf("\n排序后:");for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)printf("%.2f ", arr[i]);return 0;
}
运行结果

2.题外话:函数名的本质
在解释qsort函数的时候提到了"函数本身也可以作为另一个函数的参数"
测试以下代码,下断点至return 0;然后执行到断点处
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b)
{if (*(float*)a < *(float*)b) return -1;if (*(float*)a == *(float*)b) return 0;if (*(float*)a > *(float*)b) return 1;
}int main()
{printf("%p", compare);return 0;
}

查看打印结果

在内存窗口中输入0x00C613FC后发现内存窗口直接跳到了0x00C61900;转到反汇编,查看compare函数的第一个指令的机器码和地址

因此函数名的本质是地址,其指向函数反汇编的第一条指令
相关文章:
119.【C语言】数据结构之快速排序(调用库函数)
目录 1.C语言快速排序的库函数 1.使用qsort函数前先包含头文件 2.qsort的四个参数 3.qsort函数使用 对int类型的数据排序 运行结果 对char类型的数据排序 运行结果 对浮点型数据排序 运行结果 2.题外话:函数名的本质 1.C语言快速排序的库函数 cplusplus网的介绍 ht…...
C#封送类
封送类(Marshaling classes)在.NET框架中扮演着至关重要的角色,尤其是在托管代码与非托管代码之间进行数据交换时。封送过程涉及到将托管环境中的对象转换为非托管环境中可以理解的形式,并且反之亦然。这一过程确保了两种不同类型…...
2024年度学习总结
2024年是我学业生涯的结束,是我职业生涯的开始。2024年6月19日我顺利研究生毕业,进入体制内,陆止于此,海始于斯,知识和文化最大的魅力,大概就是教会人谦卑和敬畏。读研的目的不是为了单纯拿到哪个证书&…...
我的博客年度之旅:感恩、成长与展望
目录 感恩有你 技能满点 新年新征程 嘿,各位技术大佬、数码潮咖还有屏幕前超爱学习的小伙伴们!当新年的钟声即将敲响,我们站在时光的交汇点上,回首过往,满心感慨;展望未来,豪情满怀。过去的这…...
undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12
目录 我的解决方法: 测试: 报错: undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12 from torch._C import * # noqa: F403 ImportError: /mnt/pfs/users/lbg/envs/mmpano/lib/python3.9/site-packages/torch/lib…...
【OTA】论文笔记--《智能网联汽车整车OTA功能设计研究》智能网联汽车OTA系统设计分析报告
智能网联汽车OTA系统设计分析报告 引言 随着汽车智能化、网联化水平不断提升,现代汽车中电子控制单元(ECU)的数量和复杂度持续增加。据统计,高级轿车上电子电气元件的成本已占整车开发成本的60%~70%。为了实现对这些电控单元的软件开发调试、数据标定、文件更新和故障修复,…...
c#String和StringBuilder
目录 一,String 1,string的特点: 2,string常用方法 (1)Length (2)Substring() (3)ToUpper() (4)ToLower() (5&…...
【Linux】HTTP协议
之前,我们已经做过了自定义协议,事实上,已经有很多现成已经做好又非常好用的协议,它们都是相同的,比如HTTP协议。所谓HTTP协议,就是超文本传输协议,定义了客户端和服务器之间是如何通信的&#…...
计算机网络 (14)数字传输系统
一、定义与原理 数字传输系统,顾名思义,是一种将连续变化的模拟信号转换为离散的数字信号,并通过适当的传输媒介进行传递的系统。在数字传输系统中,信息被编码成一系列的二进制数字,即0和1,这些数字序列能够…...
《向量数据库指南》——Milvus Cloud 2.5:Sparse-BM25引领全文检索新时代
Milvus Cloud BM25:重塑全文检索的未来 在最新的Milvus Cloud 2.5版本中,我们自豪地引入了“全新”的全文检索能力,这一创新不仅巩固了Milvus Cloud在向量数据库领域的领先地位,更为用户提供了前所未有的灵活性和效率。作为大禹智库的向量数据库高级研究员,以及《向量数据…...
Unity3D 网络框架设计详解
前言 Unity3D是一款强大的跨平台游戏开发引擎,网络框架的设计对于实现客户端与服务器之间的稳定通信至关重要。本文将详细介绍Unity3D网络框架的设计原理、技术要点以及代码实现。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一…...
网络渗透测试实验四:CTF实践
1.实验目的和要求 实验目的:通过对目标靶机的渗透过程,了解CTF竞赛模式,理解CTF涵盖的知识范围,如MISC、PPC、WEB等,通过实践,加强团队协作能力,掌握初步CTF实战能力及信息收集能力。熟悉网络扫描、探测HTTP web服务、目录枚举、提权、图像信息提取、密码破解等相关工具…...
Wend看源码-Java-Collections 工具集学习
摘要 java.util.Collections它提供了一系列静态方法,用于对集合(如List、Set、Map等)进行操作。这些操作包括排序、查找、替换、同步等多种功能,帮助开发者更方便地处理集合数据。以下是Collections 提供的一些主要方法的总结。…...
[JAVA]MyLogger
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式,这样看起来比较方便些**/ class MyFormatter extends Formatter {Overridepublic String format(LogRecord ar…...
玩转OCR | 腾讯云智能结构化OCR初次体验
目录 一、什么是OCR(需要了解) 二、产品概述与核心优势 产品概述 智能结构化能做什么 举例说明(选看) 1、物流单据识别 2、常见证件识别 3、票据单据识别 4、行业材料识别 三、产品特性 高精度 泛化性 易用性 四、…...
记一次 dockerfile 的循环依赖错误
文章目录 1. 写在最前面1.1 具体循环依赖的例子 2. 报错的位置2.1 代码快速分析2.2 代码总结2.3 关于 parser 的记录 3. 碎碎念 1. 写在最前面 笔者在使用 dockerfile 多阶段构建的功能时,写出了一个「circular dependency detected on stage: xx」的错误。 解决方…...
Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】
随着城市化进程的快速推进,城市高层建筑不断增多,对建筑质量的要求也在不断提高。建筑外墙检测,如平整度和垂直度检测,是衡量建筑质量的重要指标之一。传统人工检测方法不仅操作繁琐、效率低下,还难以全面反映墙体的真…...
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
**前言:**本节内容介绍使用C/C访问数据库, 包括对数据库的增删查改操作。 主要是学习一些接口的调用, 废话不多说, 开始我们的学习吧! ps:本节内容比较容易, 友友们放心观看哦! 目录 准备mysql…...
LabVIEW化工实验室设备故障实时监测
化工实验室中,各类设备的运行状态直接影响实验的精度与安全性。特别是重要分析仪器的突发故障,可能导致实验中断或数据失效。为了实现设备运行状态的实时监控与故障快速响应,本文提出了一套基于LabVIEW的解决方案,通过多参数采集、…...
单例模式懒汉式、饿汉式(线程安全)
饿汉式单线程安全吗 饿汉式单例(Eager Singleton)是线程安全的。这种实现方式在类加载时就创建了单例实例,因此在多线程环境中,不存在多个线程同时创建实例的问题。 饿汉式单例的实现 以下是一个饿汉式单例的示例: …...
SecGPT-14B多场景:安全设备日志归一化、威胁情报摘要生成、钓鱼邮件识别
SecGPT-14B多场景实战:安全设备日志归一化、威胁情报摘要生成、钓鱼邮件识别 在网络安全领域,每天面对海量的安全日志、繁杂的威胁情报和层出不穷的钓鱼邮件,安全分析师常常感到力不从心。手动处理这些信息不仅耗时耗力,还容易遗…...
新手福音:通过快马生成wsl2入门项目,轻松迈出linux开发第一步
作为一个刚接触Linux开发的新手,我最近在尝试使用WSL2搭建开发环境时遇到了不少麻烦。从安装配置到基础命令学习,每一步都让我这个Windows用户感到手足无措。直到发现了InsCode(快马)平台,它帮我生成了一套完整的WSL2入门项目,让我…...
unrpa架构深度解析:RPA文件格式逆向工程与高性能解包技术实现
unrpa架构深度解析:RPA文件格式逆向工程与高性能解包技术实现 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 在游戏开发与逆向工程领域,RPA(R…...
霜儿-汉服-造相Z-Turbo入门必看:从零启动到生成高清古风人像全流程
霜儿-汉服-造相Z-Turbo入门必看:从零启动到生成高清古风人像全流程 想亲手生成一张充满诗意的古风汉服人像吗?比如,一位身着月白霜花刺绣汉服的少女,在江南庭院的白梅树下,气质清冷,宛如从画中走来。这听起…...
完整指南:如何高效使用SecHex-Spoofy进行Windows系统伪装与安全测试
完整指南:如何高效使用SecHex-Spoofy进行Windows系统伪装与安全测试 【免费下载链接】SecHex-Spoofy C# HWID Changer 🔑︎ Disk, Guid, Mac, Gpu, Pc-Name, Win-ID, EFI, SMBIOS Spoofing [Usermode] 项目地址: https://gitcode.com/gh_mirrors/se/Se…...
AIGC内容创作:结合Qwen3-ASR-0.6B实现视频音频自动生成字幕
AIGC内容创作:结合Qwen3-ASR-0.6B实现视频音频自动生成字幕 做视频最头疼的是什么?对我来说,不是拍摄,不是剪辑,而是加字幕。一小时的访谈视频,手动听打、校对、对齐时间轴,三四个小时就没了。…...
QueryExcel:解锁3大核心功能的多Excel文件极速查询指南
QueryExcel:解锁3大核心功能的多Excel文件极速查询指南 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 直击痛点:数据查询的效率困境 场景一:财务报表核对 月底需从…...
AI 模型推理容器化实践方案
AI模型推理容器化实践方案:高效部署与弹性扩展 随着AI技术的快速发展,模型推理的部署效率与资源管理成为企业关注的核心问题。容器化技术凭借其轻量化、可移植性和弹性扩展能力,成为AI模型推理部署的理想选择。本文将介绍AI模型推理容器化的…...
Flowable UI 6.6.0 生产环境部署踩坑实录:从H2内存库迁移到PostgreSQL的全过程
Flowable UI 6.6.0 生产环境部署实战:从H2到PostgreSQL的完整迁移指南 当你第一次接触Flowable UI时,可能会被它默认的H2内存数据库所迷惑——启动简单,但重启后数据全无。这种配置显然不适合生产环境。本文将带你深入实战,完成从…...
Intv_AI_MK11后端开发进阶:高并发场景下的系统设计与性能调优
Intv_AI_MK11后端开发进阶:高并发场景下的系统设计与性能调优 1. 高并发系统的核心挑战 当系统面临每秒数万甚至数十万的请求时,传统的架构设计往往会暴露出各种性能瓶颈。我们通过Intv_AI_MK11分析发现,高并发场景下最常见的三大挑战是&am…...
