qsort函数排序的详细介绍

本文详细介绍了C语言中的qsort函数,包括其在排序整形和结构体数组的应用,模拟实现过程,以及四个参数的含义。重点讲解了函数指针在元素比较中的作用和swap函数的字节级交换操作。
摘要由CSDN通过智能技术生成

一、qsort的举例应用

1.排序整形数组

2.排序结构体数组

二、qsort函数模拟实现及各参数介绍

 

排序整形数组

 

 148d1c0b7dfd4e0990b923e7f8dff3f2.png

 结构体数组排序

 

f8a554b15d554887940d72c65782af0a.png

 根据这两张图上的代码,想必大家也能推测出qsort函数简单的使用方法,它就在包含在头文件stdio.h中,它比冒泡法更实用,可以比较任意类型中相同类型的元素。下面,我就对qsort 函数开始进行详细的介绍。

qsort模拟实现

void cpy_qsort( void *ar, int mum, int size, int(*p)(void*, void*))
{
    int i, n;
    for (i = 0; i < mum-1; i++)
    {
        for (n = 0; n < mum -i- 1; n++)
        {
            if (p(((char*)ar+n*size), ((char*)ar +(n+1) * size)) >= 0)
            {
                swap(((char*)ar + n * size), ((char*)ar + (n + 1) * size),size);
            }
        }
    }
}

cpy_qsort有四个型参:

第一个型参(ar为空类型指针变量):接收的是被排列的任意型(int、char、struct)数组首元素地址,就用void类型.   小知识:void*ar不能直接进行解引用,也不能直接进行加减运算

第二个参数mum:接收数组元素个数,它在循环中充当循环条件。

" for (i = 0; i < mum-1; i++)"为外部循环," i<mum-1 "是为了使各数组元素能都够,i可以指被排序完的元素个数

"for (n = 0; n < mum -i- 1; n++)"为内部循环,它与swap函数并用,实现两相邻元素的交换。    “mum -i- 1”,指被排序的元素个数。当i等于2时,就是说10、9都被排序好了,下面n与n+1进行交换。当n为7时且下标为7的元素大于下标为8的元素时,可将这两个下标的值进行交换。

第三个参数size是用来接收数组类型大小:要排序的数组的类型可能是int、char、struct,它在(char*)ar+n*size中有着关键作用--ar指向数组首元素地址,size是该数组一个元素所占的字节数。如果n=1,那么(char*)ar+1*size表示跳过了一个size大小的字节,指向了第二个元素的地址。如果(char*)ar+1*size被换成(int*)ar+1*size,那它就会跳过1*size个整形大小。

第四个参数是函数指针p,它用来判断两个相邻元素的大小(int*)是根据要比较的元素类型进行转换。

421ea59e9a554afe810eb2a991eeed20.png

函数swap用来交换相邻两个元素地址的内容,因为要交换的元素可能是字符型,也可能是整形,不过它们都是以字节为单位进行存储,就只需要将它们每个字节所对应的内容进行交换就可以了。size就是每个元素所占的字节个数。

0be5ec78801049c8b718a57103bdf19f.png

以上就是对qsort函数原型的介绍了,若有叙述不详细的地方,我很欢迎各位亲们能够提出见解,我会加以修改。

后续,我还会发更多很有用的函数的详细介绍,以及语法知识、算法等讲解的博客。各位亲们,可以多多关注本人,带你们看看种花家更广阔的世界。到此,本文章对您有帮助的话,还请留下个小红心,给作者一点鼓励。

 

 

 

 

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值