当前位置: 首页 > news >正文

C语言 -- qsort的简单使用

qsort函数

  • 一、介绍
  • 二、语法格式
  • 三、使用函数
    • 从小到大
    • 从大到小
  • 四、结语

一、介绍

qsort 函数是 C 标准库中的一个通用排序函数,用于对数组进行快速排序。它定义在 <stdlib.h> 头文件中。这个非常灵活,因为它允许用户指定数组的元素类型、数组的大小、要排序的数组部分以及用于比较数组元素的函数。

二、语法格式

我们这里使用MSDN来看看qsort函数的使用说明
在这里插入图片描述
文档说明qsort是一个可以快速排序的函数
函数定义了很多形参

我们来一一解释一下:
在这里插入图片描述
base:表示需要接受一个待排序数组的首元素地址
num:表示需要接收一个待排序数组的数组大小
width:这个表示这个函数需要知道这个数组元素的元素类型大小是多少,比如int就是4
__cdecl是一个调用约定,这里我们不详细说明。
compare(voide1, voide2):这是一个函数指针,表示需要接受一个函数,并且表明这个函数需要有两个形参,其中一个个形参elem1需要传递数组第一个元素,elem2表示需要传递数组第二个元素。

在这里插入图片描述

这里有说明:
当比较后e1 < e2,则返回 <0 的数,比如 -1。后面的同理

三、使用函数

从小到大

int arr_int[] = { 5, 4, 3, 2, 1 };
int num = sizeof(arr_int) / sizeof(arr_int[0]);

这串代码定义了一个int类型的数组,并且通过sizof我们计算出了数组的长度

int cmp_int(const void* elem1, const void* elem2) {return (*(int*)elem1 - *(int*)elem2);
}

根据上面的定义,我们可以得到compare函数的写法。
这里我们定义cmp_int 表示排序int类型的数组(自定义的)
因为void *不能直接解引用,所以我们需要强制类型转换成 int* 类型的
返回值可以使用 if来进行判断,但是这里我们可以直接令其相减,可以更加便捷

qsort(arr_int, num, sizeof(arr_int[0]), cmp_int);

最后根据文档的语法
提示,我们可以得到如上的调用格式。
所以完整代码如下:

int cmp_int(const void* elem1, const void* elem2) {return (*(int*)elem1 - *(int*)elem2);
}int main() {int arr_int[] = { 5, 4, 3, 2, 1 };int num = sizeof(arr_int) / sizeof(arr_int[0]);qsort(arr_int, num, sizeof(arr_int[0]), cmp_int);for (int i = 0; i < num; i++) {printf("%d ", arr_int[i]);}printf("\n");return 0;
}

(图片版)
在这里插入图片描述

运行后可以得到我们所需要的结果
在这里插入图片描述

从大到小

想要从大到小也非常简单,只需要把e1 - e2 改写成e2 - e1即可
在这里插入图片描述
结果如下
在这里插入图片描述

四、结语

以上就是qsort函数的简单使用,更多的例子就等你们慢慢实践了。毕竟,实践实践着,你就能对qsort有更加深入的了解。那我们就下篇文章再见了,bye~


http://www.mrgr.cn/news/66047.html

相关文章:

  • Linux服务器的晴雨表
  • 推荐一款高级的安装程序打包工具:Advanced Installer Architect
  • DPDK 简易应用开发之路 6:流规则配置与多队列数据包处理
  • 摄影分享网站(源码+数据库+报告)
  • Machine Learning
  • MATLAB绘制水蒸气温度和压力曲线(IAPWS-IF97公式)
  • 大语言模型可以对数据科学有哪些改变和提升?
  • Python捕获一个函数的输出并将其作为变量使用
  • linux下交叉编译 Boost 库
  • windows UI 自动化测试框架 pywinauto 使用教程
  • 基于SSM+uniapp的营养食谱系统+LW参考示例
  • 2024Python安装与配置IDE汉化集活的全套教程
  • 一个快速、低成本、高效的Fast GraphRAG
  • Java:数组的定义和使用(万字解析)
  • 企业平台生态嵌入数据集(2000-2023年)
  • 应用层协议-FTP协议
  • 电商邮件营销策略:提升邮件转化率的关键!
  • 宁德时代Java面试题及参考答案
  • 应用层内网代理
  • 【真题笔记】16年系统架构设计师要点总结
  • 人工智能理论之Opencv图像预处理(2)
  • 【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统
  • 手机号加密脱敏还原方案
  • 铠侠CD8系列产品对比 KCD81PUG3T20 KCD81PJE3T20 KCD81VUG3T20
  • 数据库范式设计
  • Stable Diffusion(2024)Ai绘画AIGC最新安装包资源下载+自学教程