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

(C语言)qsort函数模拟实现

前言

我们需先了解qsort函数

qsort函数详解:http://t.csdnimg.cn/rTNv9

qsort函数可以排序多种数据类型,很是神奇,这是为什么,我们在里模拟实现这样的功能

目录

1. qsort函数模拟实现

2. 我们使用bubble_sort函数排序整形数组:

3. 再来排一下结构体:


1. qsort函数模拟实现

qsort函数内部是用快速排序实现的,在这里我们用冒泡排序实现

若还不清楚冒泡排序请看

冒泡排序:http://t.csdnimg.cn/p0oHx

我们创建一个bubble_sort函数来模拟实现qsort函数

函数可以排多种数据类型,参数绝对不能是int 类型,因此我们如此创建

void*可以存放多种类型的元素首地址,我们还要知道这个数组中有多少元素,元素个数一定是正数,size_t类型等同于unsigned int类型,还要知道每个元素占多少个字节,方便后面交换元素,还有一个用于比较的函数地址

因此bubble_sort函数主体是这样的:

if后使用我们传入的函数compar函数,完成比较并返回正数,负数,或0若前面的大则交换,调用swap函数。因为void*类型没法进行加减无法遍历数组,我们又知道最小的数据类型char是一字节,因此强制类型转换为char*类型,此时传入的数组每个与元素的字节大小发挥了重要作用,进行数组所有元素地址的计算,传给swap函数,

我们来看看swap函数:

用char类型进行元素的交换,

在这里举整形数组的例子:相当于将要交换的相邻整形都变成4个char类型进行交换,进行相对应的交换,以width==4进行循环后,整体上将相邻的整形交换成功了。其他的数据类型同理。

因此qsort函数至此模拟实现完成

2. 我们使用bubble_sort函数排序整形数组:

执行结果:

排序成功!!!

3. 再来排一下结构体:

执行结果:

排序成功!!!

至此我们成功实现了qsort函数的功能,我们的C语言功底又厚了一步。


感谢观看,感谢指正。

http://www.lryc.cn/news/310683.html

相关文章:

  • WordPress建站入门教程:如何在本地电脑搭建WordPress网站?
  • Vue3教程
  • Linux系统Docker部署RStudio Server
  • 【C++】每周一题——2024.3.3(手滑再再写一篇)
  • TabLayout与ToolBar、ViewPager的使用
  • 链表基础知识详解(非常详细简单易懂)
  • SAP PP学习笔记05 - BOM配置(Customize)1 - 修正参数
  • 前端从普通登录到单点登录(SSO)
  • 考研总计划(基础篇)
  • 力扣周赛387
  • 部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片
  • 挑战杯 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
  • 关于RSA公私钥加密报错Data must not be longer than 117 bytes问题解决办法
  • 【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
  • Android 开发环境搭建的步骤
  • 六、继承(一)
  • 数字化转型导师鹏:政府数字化转型政务服务类案例研究
  • 解决ODOO12 恢复数据库提示内存不够报错
  • 关于数据提交上传服务端的数据类型以及项目打包上线的流程
  • 儿童悬吊训练系统:改善脑性麻痹儿童平衡感与运动能力的有效途径
  • ElasticSearch之文档的存储
  • 在Redhat 7 Linux上安装llama.cpp [ 错误stdatomic.h: No such file or directory]
  • linux 常用 命令行HTTP客户端
  • 深入理解@Param注解:用于参数映射的利器
  • OCP Secure boot必要特性
  • 全新攻击面管理平台
  • 在VMware中安装CentOS 7并配置Docker
  • Leetcoder Day37| 动态规划part04 背包问题
  • 突破编程_C++_面试(STL 编程 vector )
  • 【报名指南】2024年第九届数维杯数学建模挑战赛报名全流程图解