重生之我是一名程序员 34

哈喽啊大家晚上好!

今天给大家带来的知识是——库函数qsort。首先,给大家介绍一下qsort函数, qsort函数是C标准库中的一种排序函数,用于对数组中的元素进行快速排序。它接受四个参数:待排序数组的基地址,数组中元素的个数,每个元素的大小,以及一个函数指针,该函数指定了比较两个元素的规则。qsort将按照指定的规则对数组进行排序,并在排序完成后返回排序后的数组。

想必大家还记得之前我给大家讲过一道C语言中的经典题目——起泡排序法(又叫冒泡排序法),之前我在给大家讲这道题目时是使用了for循环嵌套来实现的,但是今天我们知道了qsort函数,我们就可以使用此函数来实现起泡排序法,会更加的简洁。下面我先给大家说说如何使用qsort函 数,qsort函数用于对数组进行快速排序。它的原型如下:

void qsort(void* base, size_t num, size_t size, int (*compare)(const void*, const void*));

其中:

  • base是要排序的数组的指针;
  • num是数组中元素的个数;
  • size是每个元素的大小(以字节为单位);
  • compare是一个指向函数的指针(简称函数指针),用于比较两个元素的大小关系。

使用qsort函数首先需要定义一个比较函数,它的返回值是一个整数:

int compare(const void* a, const void* b) {// 比较的逻辑,返回一个整数
}

比较函数的参数类型为const void*,也就是指向任意类型数据的指针,因此在函数内部需要先将指针转换为对应类型的指针,然后再进行比较。

下面我给大家举一个例子,方便大家更好的认识怎么使用qsort函数,例如:使用qsort函数排序一个整形数组,代码如下:

#include <stdio.h>
//qosrt函数的使⽤者得实现⼀个⽐较函数
int int_cmp(const void * p1, const void * p2)
{return (*( int *)p1 - *(int *) p2);
}
int main()
{int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };int i = 0;qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++){printf( "%d ", arr[i]);}printf("\n");return 0;
}

其中,在比较函数中,如果p1-p2大于0的话则进行数组中的两个数的比较和排序(升序),如果想降序输出的话,把return语句中的p1,p2进行交换即可。

好啦,那么到此想必大家也了解怎么使用qsort函数了,那现在我们就用qsort函数来优化起泡排序法吧,如下:

```
#include <stdio.h>
#include <stdlib.h>// 比较函数
int compare(const void *a, const void *b) {return (*(int *)a - *(int *)b);
}int main() {int arr[] = {3, 1, 5, 2, 4};int n = sizeof(arr) / sizeof(arr[0]);// 使用qsort函数进行排序qsort(arr, n, sizeof(int), compare);// 输出排序后的结果for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
```

这里呢跟上面的排序整形数组是差不多的,但需要注意,我们在使用qsort函数时需要引用头文件

#include<stdlib.h>,不然编译器会报警告哦!

那么,今天的知识分享就到此结束啦,感谢大家支持,大家明天见啦!

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

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

相关文章

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第五套智能合约安全漏洞测试

第五套题的智能合约安全漏洞测试题目 环境 : ubuntu20 Truffle v5.8.3 (core: 5.8.3) Ganache v7.8.0 Solidity v0.8.3 Node v18.16.0 Web3.js v1.8.2 前言 请在测试的时候开启ganache打开,并且在truffle的配置文件配好ganache,之前两个帖子忘说了/(ㄒoㄒ)/~~ truffle-con…

YOLO改进系列之注意力机制(GAM Attention模型介绍)

模型结构 为了提高计算机视觉任务的性能&#xff0c;人们研究了各种注意力机制。然而以往的方法忽略了保留通道和空间方面的信息以增强跨维度交互的重要性。因此&#xff0c;liu提出了一种通过减少信息弥散和放大全局交互表示来提高深度神经网络性能的全局注意力机制。作者的目…

一文讲解eBPF helper 函数的设计与实现

您是否想为内核添加一个新的 eBPF 辅助&#xff08;helper&#xff09;函数&#xff0c;但不知道从何入手&#xff1f;或者&#xff0c;您是否曾遇到过类似于 R2 typectx expectedfp, pkt, pkt_meta, map_value 的 eBPF verifier 报错&#xff1f;本文将从代码层面对 eBPF 辅助…

“一键导出,高效整理:将之前的部分记录导出!“

亲爱的朋友们&#xff0c;你们是否曾经为了导出之前的记录而感到烦恼&#xff1f;冗长的过程&#xff0c;无法精确控制的选项&#xff0c;实在让人感到心力交瘁。但现在&#xff0c;我们为你带来一种全新的解决方案&#xff0c;让你的工作更轻松&#xff0c;更高效&#xff01;…

功率放大器应用领域分享:微流控细胞分选在“软骨”芯片关节炎治疗研究中的应用

微流控技术是一种通过微小的通道和微型装置对流体进行精确操控和分析的技术&#xff0c;它是现代医学技术发展过程中的一种重要的生物医学工程技术&#xff0c;具有广泛的应用前景和重要性&#xff0c;它在高通量分析、个性化医疗、细胞筛选等方面有着巨大的潜力&#xff0c;Ai…

Sui生态多家协议上线流动质押,兼顾收益与灵活性

在Sui上&#xff0c;流动质押协议允许DeFi用户质押SUI&#xff0c;并获得可交易或用于其他DeFi活动的流动质押标记token。这一过程绕过了传统质押中验证节点锁定token的问题。用户可以通过Sui的权益证明机制&#xff08;PoS&#xff09;确保网络的安全&#xff0c;同时参与生态…

k8s无法删除pv,pvc问题

问题&#xff1a; 在k8s里面创建了pv&#xff0c;pvc删除时报错&#xff1a;error: resource(s) were provided, but no name was specified 解决&#xff1a; 正确的删除顺序&#xff1a;1.先删除pod2.再删除pv 3.在删除pvc 删除pv&#xff0c;pvc命令&#xff1a; kubect…

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解前言Inception-ResNet讲解Inception-ResNet-V1Inception-ResNet-V2残差模块的缩放(Scaling of the Residuals)Inception-…

图解算法数据结构-LeetBook-栈和队列04_望远镜中最高的海拔_滑动窗口

科技馆内有一台虚拟观景望远镜&#xff0c;它可以用来观测特定纬度地区的地形情况。该纬度的海拔数据记于数组 heights &#xff0c;其中 heights[i] 表示对应位置的海拔高度。请找出并返回望远镜视野范围 limit 内&#xff0c;可以观测到的最高海拔值。 示例 1&#xff1a; 输…

为什么需要MuleSoft?如何与Salesforce协同工作?

MuleSoft通过一个集成平台将应用程序及其数据(跨云和内部云)连接起来。这被称为iPaaS&#xff0c;可将云应用程序相互集成&#xff0c;以及与本地和传统应用程序集成。 MuleSoft非常适合希望过渡到云的组织&#xff0c;提供了一种强大的集成解决方案。随着组织越来越依赖云及其…

CV计算机视觉每日开源代码Paper with code速览-2023.11.17

点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【点云分割】&#xff08;CVPR2023&#xff09;Center Focusing Network for Real-Time LiDAR Panoptic Segmentation 论文地址&#xff1a;…

第2关:图的深度遍历

任务要求参考答案评论2 任务描述相关知识编程要求测试说明 任务描述 本关任务&#xff1a;以邻接表存储图&#xff0c;要求编写程序实现图的深度优先遍历。 相关知识 图的深度优先遍历类似于树的先序遍历, 是树的先序遍历的推广&#xff0c;其基本思想如下&#xff1a; 访…

CFCA证书——基于SM2/3算法的安全信任

在中国金融认证中心&#xff08;CFCA&#xff09;发行的证书中&#xff0c;采用了最新的国密SM2/3算法来提供更高的安全保障。这一创新举措进一步增强了我国网络安全能力&#xff0c;并为用户提供了一种更可靠、更安全的选择。 SM2/3算法是中国自主研发的非对称加密算法&#…

2023年亚太杯数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…

基于FPGA的五子棋(论文+源码)

1.系统设计 在本次设计中&#xff0c;整个系统硬件框图如下图所示&#xff0c;以ALTERA的FPGA作为硬件载体&#xff0c;VGA接口&#xff0c;PS/2鼠标来完成设计&#xff0c;整个系统可以完成人人对战&#xff0c;人机对战的功能。系统通过软件编程来实现上述功能。将在硬件设计…

真菌DAP-seq|丝状真菌中与碳利用相关的调控和转录景观

转录因子 (Transcription Factors, TFs)是指能够以序列特异性方式结合DNA并且调节转录的蛋白质。TF与特异性DNA序列结合调节转录&#xff0c;同时会和其它功能蛋白结合调控下游基因的转录和翻译过程&#xff0c;也会和增强子等其它顺式作用元件结合&#xff0c;使整个调控过程更…

时间序列预测中的4大类8种异常值检测方法(从根源上提高预测精度)

一、本文介绍 本文给大家带来的是时间序列预测中异常值检测&#xff0c;在我们的数据当中有一些异常值&#xff08;Outliers&#xff09;是指在数据集中与其他数据点显著不同的数据点。它们可能是一些极端值&#xff0c;与数据集中的大多数数据呈现明显的差异。异常值可能由于…

linux在anaconda环境中配置GPU版本的cuda+cudnn+pytorch深度学习环境(简单可行!一次完成!)

一、安装前要知道的事情&#xff1a; pytorch是基于CUDA的深度学习框架&#xff0c;因此&#xff0c;pytorch的版本必须依赖于cuda toolkit的版本CUDA Toolkit可以理解成一个工具包&#xff0c;主要包含了CUDA-C和CUDA-C编译器、一些科学库和实用程序库、CUDA和library API的代…

postman查询数据库-Xmysql

步骤1&#xff1a;安装node.js 下载地址:Download | Node.js步骤2&#xff1a;安装Xmysql工具&#xff0c;命令行输入 npm install -g xmysql &#xff0c;过程中会自动安装相关依赖&#xff1b;步骤3&#xff1a;连接数据库 xmysql -h ip -u 账号 -p 密码 -d 库名 如下表示连…

【Proteus仿真】【Arduino单片机】多功能数字时钟设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、DS1302温度传感器、DS1302时钟、按键、蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示当前日期…