【C语言】qsort函数

news2024/12/26 0:51:27

目录

简介

 头文件

​编辑 函数原型:

参数函数如何写:

参数函数要求:

qsort对整性数据的排序:

qsort对字符型数据的排序:

对结构体类型的内部元素排序:


函数的底层是以快速排序实现的 

 但是本文不深入探讨快速排序是如何进行的,你可以从上面的动图可以有个大致了解。


 

一,简介

qsort函数(quick sort)是八大排序算法中的快速排序,能够排序任意数据类型的数组其中包括整形,浮点型,字符串甚至还有自定义的结构体类型。 

 二,头文件<stdlib.h>

 三,函数原型:

void qsort (void* base,//要排序的对象的第一个元素的首地址
            size_t num, //对象的个数
            size_t size,//每一个对象的大小 Size in bytes
            int (*compar)(const void*,const void*));//Pointer to a function that compares two elements.(并且这个函数要自己写)

四,参数函数如何写:

4.1参数函数要求:

必须与qsort函数的第四个参数的函数指针的类型相同

        两个参数是两个空类型的指针

        返回值为整形,对于元素来说:

        如果值小于0,第一个小于第二个;

        如果值等于0,第一个等于第二个;

        如果值大于0,第一个大于第二个;

(这些比较都是以你定义的函数为标准,而比较出来的)

五,具体实例

5.1 qsort对整性数据的排序:


//两个整形元素比较可以用><=来比较
int in_cmp(const void* a,const void* b)
{
	return *((int*)a) - *((int*)b);//void*不可直接解引用
}
int main1()
{
	int arr[8] = {5,8,9,4,3,2,8,1};
	qsort(arr,sizeof(arr)/sizeof(arr[0]),sizeof(int),in_cmp);
	for(int i = 0;i < 8;i++)
	{
		printf("%d ",arr[i]);
	}
	
	return 0;
}

 着重点:

1.qsort函数第四个参数(函数指针的类型)与库函数完全一致;

2.传入的元素的个数,每个元素的大小都可以借助sizeof操作符实现;

3.其余注意写在代码注释中;

5.2 qsort对字符型数据的排序:


//比较两个字符,字符在内存中以ASCII、码存储,可用<>=比较

int ch_cmp(const void* ach,const void* bch)
{
	return *(char*)ach - *(char*)bch;//强制类型转化为char*
}
int main2()
{
	
	char *str = "hisndksni";//str为字符串常量,不能被改变
	char p[10];//可以创建字符数组,把str内容copy过来
	memcpy(p,str,10);
	int len = strlen(str);
	qsort(p,len,sizeof(char),ch_cmp);
	printf("%s",p);
	return 0;
}

 注重点:

1.对字符串排序,结尾的\0可忽略,所以可用strlen计算元素的个数;

2.字符串常量不能被改变,初始化时要注意;

5.3 对结构体类型的内部元素排序:


struct stu
{
	int score;
	char* name;
	int hight;
};

int stu_cmp_by_score(const void* p1,const void* p2)
{
	return ((struct stu*)p1)->score - ((struct stu*)p2)->score;
}
int main()
{
	struct stu arr[]= {{90,"zhangsan",175},{88,"lisi",180}};
	int sz1 = sizeof(arr)/sizeof(arr[0]);
	qsort(arr,sz1,sizeof(arr[0]),stu_cmp_by_score);
	for(int i = 0;i < sz1;i++)
	{
		printf("%d ",arr[i].score);
	}
	
	return 0;
}

 1.结构体指针写完整;

2.适当的用括号让自己的代码逻辑更加清晰;


cplusplus的qort函数icon-default.png?t=N7T8https://legacy.cplusplus.com/reference/cstdlib/qsort/?kw=qsort


完~

未经作者同意禁止转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于「光学神经网络」的一切:理论、应用与发展

/目录/ 一、线性运算的光学实现 1.1. 光学矩阵乘法器 1.2. 光的衍射实现线性运行 1.3. 基于Rayleigh-Sommerfeld方程的实现方法 1.4. 基于傅立叶变换的实现 1.5. 通过光干涉实现线性操作 1.6. 光的散射实现线性运行 1.7. 波分复用&#xff08;WDM&#xff09;实现线性运…

phpstudy和IDEA 配置php debug

1.安装xdebug 扩展&#xff0c;phpinfo() 查看 2.配置php.ini zend_extensionD:/phpstudy_pro/Extensions/php/php7.4.3nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_traceOn xdebug.trace_output_dirD:/phpstudy_pro/Extensions/php_l…

vue + docxtemplater 导出 word 文档

一、痛点 word 导出 这种功能其实之前都是后端实现的&#xff0c;但最近有个项目没得后端。所以研究下前端导出。 ps&#xff1a; 前端还可以导出 pdf&#xff0c;但是其分页问题需要话精力去计算才可能实现&#xff0c;并且都不是很完善。可参考之前的文章&#xff1a;利用 h…

Flink 替换 Logstash 解决日志收集丢失问题

在某客户日志数据迁移到火山引擎使用 ELK 生态的案例中&#xff0c;由于客户反馈之前 Logstash 经常发生数据丢失和收集性能较差的使用痛点&#xff0c;我们尝试使用 Flink 替代了传统的 Logstash 来作为日志数据解析、转换以及写入 ElasticSearch 的组件&#xff0c;得到了该客…

PasteNow for mac剪贴板工具

PasteNow 是一款简单易用的剪贴板管理工具&#xff0c;可帮助用户快速存储和管理剪贴板上的文本和图片内容。用户可以使用 PasteNow 软件快速将文本内容保存到不同的笔记或页面中&#xff0c;也可以方便地将剪贴板上的图片保存到本地或分享给其他应用程序。 此外&#xff0c;P…

Java互联网+医院智能导诊系统源码 自动兼容H5小程序、Uniapp

随着信息和通信技术的进步,智能和移动技术越来越普遍,尤其在医疗保健领域,一些新型卫生信息系统被不断开发出来支持医院和其他卫生保健组织的管理和运作。 智能导诊系统是嵌入到医院和医疗保健卫生中心 HIS系统中的一种专门导诊系统,通过智能语音交互的方式帮助用户完成导诊、分…

XC2303 PFM 升压 DC-DC 变换器 SOT23-3封装 体积小 外围简单 适合小电流产品

XC2303系列产品是一种高效率、低纹波、工作频率高的 PFM 升压 DC-DC 变换器。XC2303系列产品仅需要四个元器,就可完成将低输入的电池电压变换升压到所需的工作电压&#xff0c;非常适合于便携式1~4 节普通电池应用的场合。 电路采用了高性能、低功耗的参考电压电路结构&#xf…

深度学习常见激活函数:ReLU,sigmoid,Tanh,softmax,Leaky ReLU,PReLU,ELU整理集合,应用场景选择

文章目录 1、ReLU 函数&#xff08;隐藏层中是一个常用的默认选择&#xff09;1.1 优点1.2 缺点 2、sigmoid 函数2.1 优点2.2 缺点 3、Tanh 函数3.1 优点3.2 缺点 4、softmax 函数&#xff08;多分类任务最后一层都会使用&#xff09;5、Leaky ReLU 函数5.1 优点5.2 缺点 6、PR…

【JavaEE初阶】 JavaScript相应的WebAPI

文章目录 &#x1f332;WebAPI 背景知识&#x1f6a9;什么是 WebAPI&#x1f6a9;什么是 API &#x1f38d;DOM 基本概念&#x1f6a9;什么是 DOM&#x1f6a9;DOM 树 &#x1f340;获取元素&#x1f6a9;querySelector&#x1f6a9;querySelectorAll &#x1f384;事件初识&am…

WordPress用sql命令批量删除所有文章

有时我们需要将一个网站搬迁到另一个服务器。我们只想保留网站的模板样式&#xff0c;而不需要文章内容。一般情况下我们可以在后台删除已发表的文章&#xff0c;但如果有很多文章&#xff0c;我们则需要一次删除所有文章。 WordPress如何批量删除所有文章 进入网站空间后台&a…

chrome F12 performance 性能分析

本文主要是介绍chrome F12 performance 性能分析&#xff0c;对大家解决编程问题具有一定的参考价值&#xff0c;需要的程序猿们随着小编来一起学习吧&#xff01; 页面加载速度慢&#xff0c;到底是多少秒&#xff0c;瓶颈在哪里&#xff1f; 前端性能工具Chrome performance…

学生心目中的好老师

在教育的世界里&#xff0c;一个好老师可以改变一个学生的人生轨迹。他们不仅传授知识&#xff0c;更是引导学生发现自己的潜力&#xff0c;激发他们对未来的憧憬。那么&#xff0c;如何成为一名学生心目中的好老师呢&#xff1f; 拥有一颗热爱教育的心。深深的热爱着教育事业&…

TikTok美区本土店铺如何做好IP隔离?

为什么要进行IP隔离呢&#xff1f;因为我们无法在国内直接运营Shopee、TikTok、Lazada等平台的本土店&#xff0c;平台识别出店铺登录IP非本土IP&#xff0c;则容易导致店铺风控、被标记为伪本土店&#xff0c;影响店铺经营。 TikTok美区店铺的IP隔离方法和Shopee本土店一致&a…

数字人源码部署一定要找数字人源头工厂公司

今年入局数字人产业的公司都已经赚的盆满钵满,有很多播主还在叫嚣着数字人没用没用。可谓眼光短浅&#xff0c;典型的吃不到葡萄说葡萄说。没用的话&#xff0c;国内所有的互联网巨头为什么都在跑步进场呢。今天我们要讲的是数字人二级市场的产业&#xff0c;所谓二级市场就是中…

SWOT是什么意思?SWOT分析必备的10款软件,别说你还不知道!

在今天快速变化的商业环境中&#xff0c;保持竞争优势并做出明智的决策至关重要。无论你是经验丰富的高管、企业家还是专注的团队领导者&#xff0c;战略思维都是必不可少的。在这个过程中的一个重要工具是SWOT分析软件。 正确的SWOT分析工具可以决定商业战略是否能够创造有意…

Vue3-provide和inject

作用和场景&#xff1a;顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 跨层传递普通数据&#xff1a; 1.顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 既可以传递普通数据&#xff0c;也可以使用ref传递响应式数据&#xff08…

Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/3)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

Postman接口测试工具完整教程

前言 作为软件开发过程中一个非常重要的环节&#xff0c;软件测试越来越成为软件开发商和用户关注的焦点。完善的测试是软件质量的保证&#xff0c;因此软件测试就成了一项重要而艰巨的工作。要做好这项工作当然也绝非易事。 第一部分&#xff1a;基础篇 postman:4.5.1 1.安…

某基金公司赵哥“逆袭”了!!!

赵哥&#xff0c;在上海一家基金公司做运维主管。 平时工作的首要任务&#xff0c;就是保障公司各项信息系统的安全运行。 万一系统运行中出现了一些重要问题&#xff0c;他还要负责进行调查、记录与汇报... 总之&#xff0c;责任很重&#xff0c;该说不说&#xff0c;搞不好…

虚拟机系列:windows 虚拟机相关功能、组件梳理

一. 简介 英文名称中文名称说明Container容器Guarded Host受保护的主机利用远程证明创建并运行受防护的虚拟机Hyper-V├Hyper-V Management ToolsHyper-V 管理工具包含 GUI 管理工具和 Power Shell 的 Hyper-V 模块└Hyper-V PlatformHyper-V 平台├Hyper-V HypervisorHyper-V …