C语言-----qsort函数的功能以及模拟实现

1.冒泡排序

(1)冒泡排序就是数据两个两个的进行比较每一趟都是一个数和其他的所有的数字比较,

(2)这个要的是升序排列,所以前面的大的话,就会调换位置

(3)冒泡排序的缺点就是只能比较整形数据,其他类型的数据无法进行比较,这个时候引入qsort

2.qsort函数介绍

(1)这个函数有4个参数,第一个是指向起始地址的指针,第二个是需要比较的元素个数

第三个是单个元素的大小,最后的是函数指针,指向函数的地址,参数都是void*类型的

(2)首先,void*就是没有固定的数据类型,不能直接进行解引用的操作,而且不能加减

整数进行指针的移动

(3)返回值

qsort函数的返回值就是第一个指针指向的元素大于第二个指针指向的元素就返回正数,小于就返

回负数,相等就会返回0;我们可以直接使用两者的插值作为返回值,这样也满足要求的;

(4)比较整数

这个是用qsort函数实现排序,把void*类型的指针转换成为int*类型之后就可以解引用,利用2个数

的差值作为返回值,int_cmp是指向函数可以比较两个数的大小;

(5)比较结构体数据---根据年龄

1.return里面的是结构体成员访问操作符,显示强制类型转换成为结构体类型,再进行解引用;

2.定义结构体数组,里面含有3个元素,sizeof(s0)是计算第一个结构体成员的大小;

(6)比较结构体数据----根据名字

(1)strcmp是库函数,专门用来比较字符串的大小,他的比较原理就是通过指向第一个字符的指

针的移动,依次进行比较,返回值的原理和qsort相同;

(2)sizeof(s)/sizeof(s0)是计算结构体成员的个数;

3.函数的模拟实现

(1)这个就是借助冒泡排序函数实现qsort的功能

(2)void bubble里面的cmp指向int_cmp函数,这里相当于是回调函数,

(3)swap函数就是用来交换的,只是这里不知道数据的类型,这个里面是强制类型转换为

char*类型的数据,因为char*一次一个字节,力度更加的细致,if语句是判断是否满足交换的

条件,cmp相当于是int_cmp的地址,运行到cmp的时候就会调用int_cmp函数,返回值大于

0的时候就会执行swap函数进行交换

(4)swap在进行交换的时候,是一个字节一个字节的进行交换,如果是整形数据,就需要

进行4次循环,size就是单个数据类型的大小,用来控制循环的次数;

(5)swap函数传参的时候,不仅需要交换的两个元素的起始地址,还要知道什么时候停止,

所以要知道size,就是单个数据类型的大小也要作为参数,这只会完成一组数据的交换,如此

满足条件,就还会像这样执行swap函数进行交换。

相关推荐
Dillon Dong6 小时前
【风电控制】TI TMS320F28379D 双CPU架构解析与任务分布设计
嵌入式硬件·算法·变流器·风电控制
小羊在睡觉12 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
3DVisionary12 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
AI玫瑰助手12 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
好评笔记12 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_4684668512 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
油炸自行车12 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400
肩上风骋12 小时前
C++14特性
开发语言·c++·c++14特性
_日拱一卒13 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
珂朵莉MM13 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--束搜索
人工智能·算法