当前位置: 首页 > 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语言功底又厚了一步。


感谢观看,感谢指正。

相关文章:

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

前言 我们需先了解qsort函数 qsort函数详解:http://t.csdnimg.cn/rTNv9 qsort函数可以排序多种数据类型,很是神奇,这是为什么,我们在里模拟实现这样的功能 目录 1. qsort函数模拟实现 2. 我们使用bubble_sort函数排序整形数…...

WordPress建站入门教程:如何在本地电脑搭建WordPress网站?

前面跟大家分享了『WordPress建站入门教程:如何安装本地WordPress网站运行环境?』,接下来boke112百科就继续跟大家分享本地电脑如何搭建WordPress网站。 小皮面板(phpstudy)的“软件管理 – 网站程序”虽然可以一键部…...

Vue3教程

1.1 配置环境 vue官网: Vue.js - The Progressive JavaScript Framework | Vue.js 终端 Linux和Mac上可以用自带的终端。 Windows上推荐用powershell或者cmd。Git Bash有些指令不兼容。 安装Nodejs 安装地址: Node.js 安装vue/cli 打开Git Bash&#x…...

Linux系统Docker部署RStudio Server

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问…...

【C++】每周一题——2024.3.3(手滑再再写一篇)

题目 Cpp 【问题描述】 求N个字符串的最长公共子串&#xff0c;2 < N&#xff1c;&#xff1d;20&#xff0c;字符串长度不超过255。 例如&#xff1a;N&#xff1d;3&#xff0c;由键盘依次输入三个字符串为 What is local bus? Name some local buses. local bus is a h…...

TabLayout与ToolBar、ViewPager的使用

目录 1. 在ToolBar中添加TabLayout 2. 将工具栏设为活动栏 3. 初始化TabLayout 4. TabLayout监听器 可以在ToolBar工具栏中添加TabLayout配合&#xff0c;效果如下图。 1. 在ToolBar中添加TabLayout TabLayout的常用属性有&#xff1a; tabBackground 指定标签的背景 t…...

链表基础知识详解(非常详细简单易懂)

概述&#xff1a; 链表作为 C 语言中一种基础的数据结构&#xff0c;在平时写程序的时候用的并不多&#xff0c;但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛&#xff0c;所以必须要搞懂链表&#xff0c;链表分为单向链表和双向链表&#xff0c;单向链表很…...

SAP PP学习笔记05 - BOM配置(Customize)1 - 修正参数

上次学习了BOM相关的内容。 SAP PP学习笔记04 - BOM1 - BOM创建&#xff0c;用途&#xff0c;形式&#xff0c;默认值&#xff0c;群组BOM等_sap销售bom与生产bom-CSDN博客 SAP PP学习笔记04 - BOM2 -通过Serial来做简单的BOM变式配置&#xff0c;副明细&#xff0c;BOM状态&…...

前端从普通登录到单点登录(SSO)

随着前端登录场景的日益复杂化和技术思想的不断演进&#xff0c;前端在登录方面的知识结构变得越来越复杂。对于前端开发者来说&#xff0c;在日常工作中根据不同的登录场景提供合适的解决方案是我们的职责所在&#xff0c;本文将梳理前端登录的演变过程。 1、无状态的HTTP H…...

考研总计划(基础篇)

分为数学&#xff0c;专业课&#xff0c;英语三个部分 数学规划表 高数基础&#xff1a;3月初到4月15号 具体实行计划&#xff1a;分为看课日和写题日 看课日:早上10点到12点半看课&#xff0c;19:30到21:30继续看课。 写题日:早上10点到12点半复习前一天的题目&#xff0…...

力扣周赛387

第一题 代码 package Competition.The387Competitioin;public class Demo1 {public static void main(String[] args) {}public int[] resultArray(int[] nums) {int ans[]new int[nums.length];int arr1[]new int[nums.length];int arr2[]new int[nums.length];if(nums.leng…...

部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片

PhotoMaker只需要一张人脸照片就可以生成不同风格的人物照片&#xff0c;可以快速出图&#xff0c;无需额外的LoRA培训。 安装环境 python 3.10gitVisual Studio 2022 安装依赖库 git clone https://github.com/bmaltais/PhotoMaker.git cd PhotoMaker python -m venv venv…...

挑战杯 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…...

关于RSA公私钥加密报错Data must not be longer than 117 bytes问题解决办法

一、问题描述 1.背景 大家都知道&#xff0c;在日常项目开发过程中&#xff0c;数据的传输安全一直都是值得重视的问题&#xff0c;当然了市面上解决此类办法的技术也有很多&#xff0c;本项目在提供给第三方使用是数据以及校验第三方传递的参数&#xff0c;采用常用的RSA公私…...

【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0

目录 一、 Kubernetes 的概述 二、服务器配置 2.1 服务器部署规划 2.2服务器初始化配置 三、安装Docker/kubeadm/kubelet【所有节点】 3.1 安装Docker 3.2 添加阿里云YUM软件源 3.3 安装kubeadm&#xff0c;kubelet和kubectl 四、部署Kubernetes Master 五、部署Kube…...

Android 开发环境搭建的步骤

本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具&#xff0c;以下是一些基础步骤&#xff1a; 1. 安装 Java Development Kit (JDK) 首先&#xff0c;您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础&#xf…...

六、继承(一)

1 继承的引入 以往我们想分别实现描述学生、老师的类&#xff0c;可能会这样子做&#xff1a; class Student {string _name;string _number;int _tel;int id;string _address;int _age; }; class Teacher {string _name;int _level;int _tel;int id;string _address;int _ag…...

数字化转型导师鹏:政府数字化转型政务服务类案例研究

政府数字化转型政务服务类案例研究 课程背景&#xff1a; 很多地方政府存在以下问题&#xff1a; 不清楚标杆省政府数字化转型的政务服务类成功案例 不清楚地级市政府数字化转型的政务服务类成功案例 不清楚县区级政府数字化转型的政务服务类成功案例 课程特色&#x…...

解决ODOO12 恢复数据库提示内存不够报错

1. 现象 点击 ‘restore database’ 控制台报错&#xff1a; 2. 解决措施 a. 进入启动脚本的文件夹 cd odoo/odoo-12.0/输入命令 ./odoo-bin --addons-pathaddons --databaseodoo --db_userodoo --db_passwordodoo --db_hostlocalhost --db_port5432 -i INITb. 刷新页面…...

关于数据提交上传服务端的数据类型以及项目打包上线的流程

1 请求头的类型&#xff1a; content-type&#xff1b; 01: application/json 数据以json格式请求&#xff1a;{"key":"value"} 02: application/x-www.form-urlencoded from表单的数据格式 name"zs"&age12 03 mutipart/form-data…...

跨境电商标题焦虑?QA揭秘“批量更新标题“如何拯救你的运营效率

Q1&#xff1a;什么是"批量更新标题"&#xff1f;这玩意儿真的存在吗&#xff1f;Q&#xff1a;小彭&#xff0c;我听说有个功能叫"批量更新标题"&#xff0c;能批量改产品标题&#xff0c;是真的吗&#xff1f;还是又是那种"画大饼"的工具&…...

纯血鸿蒙彻底告别安卓依赖:HarmonyOS 7.0 即将正式发布,国产操作系统迎来真正转折点

OpenHarmony 7.0 Beta1已经悄然上线GitCode&#xff0c;开发者体验官招募也同步启动。多数人还在讨论鸿蒙又更新了版本&#xff0c;但很少有人注意到这次更新的核心变化&#xff1a;纯血鸿蒙终于移除了对Android APK兼容层的依赖。这仅仅是一次常规版本迭代吗&#xff1f;还是国…...

西门子S7-1200 PLC编程避坑指南:从振荡电路到浮点数计算,新手最易犯的5个错误

西门子S7-1200 PLC编程实战避坑手册&#xff1a;从逻辑陷阱到数据精度的深度解析 在工业自动化领域&#xff0c;PLC编程就像是在钢丝上跳舞——一步错可能导致整个产线瘫痪。作为西门子S7-1200的资深用户&#xff0c;我见过太多初学者在相同的地方跌倒。这篇文章不会给你教科书…...

openpilot自动驾驶系统深度解析:从架构原理到300+车型适配实战

openpilot自动驾驶系统深度解析&#xff1a;从架构原理到300车型适配实战 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_…...

2025年终极指南:PlayIntegrityFix让你的Root设备完美通过Google认证

2025年终极指南&#xff1a;PlayIntegrityFix让你的Root设备完美通过Google认证 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix 还在为Root后的Android设备无法正…...

告别闪烁!用STM32和Simulink搞定LED的PWM调光(附仿真文件)

告别闪烁&#xff01;用STM32和Simulink搞定LED的PWM调光&#xff08;附仿真文件&#xff09; LED照明在医疗设备、植物工厂等场景中&#xff0c;对光源稳定性要求极高。传统调光方案常因电路噪声或控制算法缺陷导致肉眼可见的闪烁&#xff0c;这不仅影响用户体验&#xff0c;更…...

nginx升级(win和linux)

win升级 把html和conf搬过来&#xff0c;点击新的nginx即可 需要注册成服务参考&#xff1a; https://www.cnblogs.com/Code-Rain/p/16642572.htmlhttps://www.cnblogs.com/Code-Rain/p/16642572.html https://blog.csdn.net/hon_vin/article/details/133717846https://blog…...

WarcraftHelper:如何快速解决魔兽争霸3在现代电脑上的三大兼容问题?

WarcraftHelper&#xff1a;如何快速解决魔兽争霸3在现代电脑上的三大兼容问题&#xff1f; 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典…...

观察Taotoken在流量高峰时段的请求成功率和路由表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken在流量高峰时段的请求成功率和路由表现 在构建依赖大模型能力的应用时&#xff0c;服务的稳定性是开发者关心的核心问…...

Ventoy终极指南:一键制作万能启动盘的完整教程

Ventoy终极指南&#xff1a;一键制作万能启动盘的完整教程 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 你是否厌倦了每次安装系统都要重新格式化U盘&#xff1f;Ventoy是一款革命性的开源启动盘制作…...