使用VC库函数中的快速排序函数

【嵌入式底层知识修炼】按键和LED共用IO口的分时复用扫描方法 文章目录01 - PCB原理图例程02 - 分时复用的注意项和设计2.1 - 注意项2.2 - 设计03 - 代码实现 只要我跑的速度够快,寂寞就追不上我 只要Key和Led切换速度够快,人眼就看不出来 ————小白   如果你存在按键Key和显示Led共用同一个IO时,需要分时复用的需求,则可以移植代码进行使用: 代码所占code少于0.5K 线程安全,中断安全 可移植性高,配置容易 注意:系统需要存在一个至少为1ms的时钟中断 01 - PCB原理图例程   举2个Key和Led共用IO口的 阅读详情

上一篇讲了快速排序的实现。但在很多场合,直接使用快速排序的库函数是很方便的。下面讲下VC中库函数qsort()的用法:

 

函数原型:

void qsort(void *base,size_t num,size_t width, int (__cdecl *compare )(const void *, const void *) );

第一个是数组地址,第二是数组大小,第三个是数组中每个元素的字节数,最后一个是个函数指针,表示如何比较数组中的元素。

头文件 #include <stdlib.h>

 

 

下面分别就int等整数数据,double等浮点数据,结构体和类,按指定方式这四种情况进行讲解。

 

实例1   对int等整数数据进行排序

int cmp(const void *x, const void *y)
{
	return *(int*)x - *(int*)y;
}
qsort(a, MAXN, sizeof(a[0]), cmp); 

MAXN为数组大小,下同

 

实例2   对double等浮点数进行排序

int cmpDouble(const void *x, const void *y)
{
	return (*(double*)x > *(double*)y ? 1 : -1);
}
qsort(a, n, sizeof(a[0]), cmpDouble);

 

实例3  对结构体,类等复杂数据进行排序

如

struct Student
{
	char szName[30];
	int  nAge;
};

先对年龄排序,年龄相同再按姓名排序。

int cmpStudent (const void *x, const void *y)
{   //先作下指针转换,再按要求比较
	Student *pNodex = (Student*)x, *pNodey = (Student*)y;
	if (pNodex->nAge != pNodey->nAge)
		return pNodex->nAge - pNodey->nAge;
	else
		return strcmp(pNodex->szName, pNodey->szName);
}
qsort(a, n, sizeof(a[0]), cmpStudent);


实例4     按指定方式进行排序。

如对只有大小写字母的字符串"AajkuKdYUBCDwyz"进行排序,要求大写字母在前,小写字母在后。

int cmp1(const void *x, const void *y)
{
	char *pcx = (char*)x, *pcy = (char*)y;

	bool flag1 = *pcx >= 'A' && *pcx <= 'Z';
	bool flag2 = *pcy >= 'A' && *pcy <= 'Z';

	if(flag1 == flag2)    //如果都为大写字母或都为小写字母
		return *pcx - *pcy;
	else                  //否则,谁为大写字母,谁的权值小。
		return flag1 ? -1 : 1;
}
int main()
{
	char szText[] = "AajkuKdYUBCDwyz";
	qsort(szText, strlen(szText), sizeof(szText[0]), cmp1);
	printf("%s\n", szText);
	return 0;
}


 

 

AI Agent 入门(一):什么是 AI Agent?——从概念到第一个 API 调用 阅读详情

相关推荐

MATLAB仿真耗散孤子共振与金兹堡-朗道方程解析

耗散孤子共振(DSR)是非线性光学中的特殊脉冲现象,通过平衡非线性效应、色散与能量耗散实现稳定传输。其核心数学模型金兹堡-朗道方程(GLE)描述了光脉冲在增益介质中的演化规律,采用分步傅里叶方法(SSFM)可高效求解这类非线性偏微分方程。该技术在光纤激光器设计、高速光通信系统优化等领域具有重要价值,特别是在需要高能量脉冲保持稳定传输的场景。MATLAB数值仿真为理解DSR物理机制提供了直观工具,通过参数扫描可验证脉冲能量与宽度的线性关系特征,并为实际器件设计提供预测依据。

weixin_31240035的博客 256

学会快速排序库函数qsort的使用以及实现

qsort的使用和实现

qq_67838572的博客 259

手把手教你用UC3844设计多路输出反激电源(附PCB布局避坑指南)

本文详细介绍了使用UC3844设计多路输出反激电源的实战技巧,包括核心电路设计、变压器参数计算、PCB布局优化及EMI抑制方法。通过实验室实测数据和项目经验,帮助工程师避开常见设计陷阱,提升电源性能和可靠性。特别附赠PCB布局避坑指南,助力高效完成开关电源设计。

weixin_30300225的博客 568

VS qsort和sort函数

qsort函数功 能: 使用快速排序例程进行排序 头文件:stdlib.h 函数原型: void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void *) ) 参数说明:...

PtaQ的博客 2034

保姆级教程:将YOLOv8模型封装成Docker镜像,集成到CVAT实现自动标注

本文提供了一份详细的保姆级教程,指导如何将YOLOv8模型封装成Docker镜像并集成到CVAT平台,实现自动化标注。通过环境配置、模型服务化封装、Docker镜像构建与优化、CVAT平台集成等步骤,帮助开发者高效完成计算机视觉项目的自动标注工作流,显著提升标注效率。

weixin_28692817的博客 412

异步fifo的UVM验证(最终最终版)

更新了refmdl以及scb

qq_44674008的博客 2987

C++ 排序函数 sort(),qsort()的用法【转】

C++ 排序函数 sort(),qsort()的用法想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~所以自己总结了一下,首先看sort函数见下表:  函数名 功能描述  sort 对给定区间所有元素进行排序  stable_sort 对给定区间所有元素进行稳定排序  partial_sort 对给定区间所有元素部分排序  partial_sort_copy 对给定区间复制并排序  nth_element 找出给定区间的某个位置对应的元素  i

fanxing1的专栏 1017

Arduino开发实例-EMG 肌肉信号传感器

在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌肉的活动量。 3 绿色、红色和黄色电极连接到模块,用于传输来自肌肉运动的电信号。

视觉与物联智能 1695

【C++】序论:qsort和sort函数详解

qsort函数是C语言提供的库函数,可以将任何无序数据排列成有序数据,本质上是通过指针移动和快速排序完成对数组内部数据的排序,并放回原数组中参数1:void* base指向未知类型的待排序数组参数2:size_t num,其中size_t是以字节为单位的数据类型,这个参数要传入数组中的元素个数参数3:size_t width,是数组类型的大小(sizeof(int))参数4:int(*compare)(const void* p1,const void* p2)

zwznzje的博客 4577

SD卡烧写Linux kernel——SD卡分区,并烧写uboot,kernel,DTB及filesystem

Linux Ubuntu环境下对SD卡分区(烧写uboot,kernel,及filesystem) 介绍dd命令的使用,SD卡分区、格式化、复制文件等 fdisk命令

weixin_42408707的博客 5056

【WRF-Urban数据集】中国60个城市的1 km分辨率城市冠层参数(UCPs)

中国60个城市的1 km分辨率城市冠层参数(UCPs)

WW、forever的博客 1063

C语言关于排序的十一个函数

1.二叉树 堆排序 O(nlogn) 满二叉树 叶子节点全部在同一个高度,且除了叶子节点外,所有的节点都有左右子节点 一棵高度为h的满二叉树,一共有(2^h-1)节点 平衡二叉树 从任意一个节点开始,它的左右子树的高度差不会超过1 完全二叉树 除了最后一层的叶子节点必须是从左到右,是一颗满二叉树 把数组看作是一个完全二叉树 把完全二叉树调整成大栈堆(小栈堆),从最后一个有子节点的节点(len...

weixin_42397177的博客 4959

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

利用VC/VS的安装目录找到C/C++库函数实现的源代码

2013-07-03 20:08:57 大多开发软件的装目录下都有很多有价值的东西,比如help文档、user guide、src文件等。今天在VS的安装目录下发现了库函数的源文件,这些文件中有对所有库函数的实现,是Microsoft Corporation写的,应该都是经过优化的,以后在需要自己实现这些函数时,可以作为参考。 我用的是VS2010,库函数的源文件目录为: D:\Progra...

weixin_33862993的博客 705

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

用快速排序法时出现栈溢出问题解析

这段时间在用排序法,从(http://blog.youkuaiyun.com/yexinghai/article/details/4649923)等其他网站上比较发现快速排序法时间效率很高,从(http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html)等网站中参考并改写了适合自己的快速排序代码,发现数据超过一定数量,就出现错误: u

gll028的专栏 5137

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

记一次快速排序算法的调试

同学用C++编写了一个快速排序的程序,实现如下功能:1,用一个数组包含原始数据;2,用一个数组包含每个原始数据的地址;3,利用快速排序算法,对第二个数组进行排序。很显然,排序的交换操作与原始数据的存储分开进行,是为了节省时间。算法写出来了,程序编译运行了,但是:排序前和排序后,输出的结果居然是一样的。 我最初的想法是:既然排序前后输出一样,那么很可能是根本没有发生交换[1]。

boluo1982107的专栏 1101
上一篇: 白话经典算法系列之六 快速排序 快速搞定
下一篇: VC 为程序创建快捷方式的详细讲解
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值