qsort库函数的使用

news2024/12/27 18:32:57

目录

1.认识qsort函数

2.qsort 排序整型数据

3.qsort排序字符型数据

4.qsort排序浮点型数据、

5.qsort排序结构体数据

6.总结


1.认识qsort函数

 注:以上信息来源于cplusplus官网

 翻译以上信息如下:

 qsort函数是c语言标准库中基于快速排序算法实现的一种对数组进行排序的函数,它可以排序任意数据类型。十分简单方便。

//练习使用库函数,qsort排序各种类型的数据
//void qsort (void* base, size_t num, size_t size,int (*compar)(const void*, const void*));

qsort函数参数如上:


2.qsort 排序整型数据

#include<stdio.h>
#include<stdlib.h>
int compar_int(const void* e1, const void* e2)
{
	return *(int*)e1 - *(int*)e2;
}
int main()
{
	int arr1[10] = { 8,9,7,6,5,2,3,1,4,10 };
	int sz1 = sizeof(arr1) / sizeof(arr1[0]);
	printf("排序前的顺序为:\n");
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	qsort(arr1, sz1, sizeof(arr1[0]), compar_int);
	printf("\n排序后的顺序为:\n");
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}

	return 0;
}

3.qsort排序字符型数据

#include<stdio.h>
#include<stdlib.h>
int compar_char(const void* e1, const void* e2)
{
	return *(char*)e1 - *(char*)e2;
}
int main()
{
	char arr2[5] = { 'e','d','c','b','a' };
	int sz1 = sizeof(arr2) / sizeof(arr2[0]);
	printf("排序前的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%c ", arr2[i]);
	}
	qsort(arr2, sz1, sizeof(arr2[0]), compar_char);
	printf("\n排序后的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%c ", arr2[i]);
	}

	return 0;
}

4.qsort排序浮点型数据、

#include<stdio.h>
#include<stdlib.h>
int  compar_float(const void* e1, const void* e2)
{
	return *(float*)e1 - *(float*)e2;
}
int main()
{
	float arr3[5] = { 3.14,3.12,5.25,9.58,1.02 };
	int sz1 = sizeof(arr3) / sizeof(arr3[0]);
	printf("排序前的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%f ", arr3[i]);
	}
	qsort(arr3, sz1, sizeof(arr3[0]), compar_float);
	printf("\n排序后的顺序为:\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%f ", arr3[i]);
	}

	return 0;
}

5.qsort排序结构体数据

#include<stdio.h>
#include<stdlib.h>

//定义一个结构体类型

//这个语句是定义了一个结构体类型,它的名字是 student,它的成员变量有两个,
//分别是 char 类型的 name 和 int 类型的 age。
//这个语句可以用来创建一个表示学生信息的数据类型,但它本身并不创建任何对象。
struct student
{
	char name[20];
	int age;
};

int comapar_student_by_age(const void* e1, const void* e2)
{

	return ((struct student*)e1)->age - ((struct student*)e2)->age;

}
int main()
{
	struct student arr4[] = { {"zhangsan",20},{"lisi",15},{"jamo",18} };
	int sz = sizeof(arr4) / sizeof(arr4[0]);
	qsort(arr4, sz, sizeof(arr4[0]), comapar_student_by_age);
	for (int i = 0; i < sz; i++)
	{
		printf("姓名:%s 年龄:%d\n", arr4[i].name, arr4[i].age);

	}
	return 0;
}

6.总结

通过以上代码我们可以看出在main函数主体部分代码基本相当一致,在使用qsort函数的主要部分就是自己写出一个compar函数来确定比较的方法。

我们来观察一下:

 

 

 我们可以看出我们只需要在compar函数中将需要排序的两个相邻元素e1和e2类型强制转换为对应的数据类型。

因为void * 空指针不能解引用


以上就是对qsort函数使用的例子和总结,谢谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速走出网站沙盒期(关于优化百度SEO提升排名)

网站沙盒期是指新建立的网站在百度搜索引擎中无法获得好的排名&#xff0c;甚至被完全忽略的现象。这个现象往往发生在新建立的网站上&#xff0c;因为百度需要时间来评估网站的质量和内容。蘑菇号www.mooogu.cn 为了快速走出网站沙盒期&#xff0c;需要优化百度SEO。以下是5个…

Redis的softMinEvictableIdleTimeMillis和minEvictableIdleTimeMillis参数

背景&#xff1a; Redis的softMinEvictableIdleTimeMillis&#xff0c;minEvictableIdleTimeMillis是一个令人疑惑两个参数&#xff0c;特别是当它和minIdle组合起来时就更难理解了&#xff0c;本文就来梳理下他们的之间的关系 softMinEvictableIdleTimeMillis&#xff0c;mi…

如何正确安装封箱机胶带

胶带是封箱机与开箱机最重要的耗材&#xff0c;在使用的过程中安装胶带卷是必不可少的工作项目&#xff0c;但很多用户使用很久了&#xff0c;安装的胶带仍然不理想&#xff0c;下面就和您分享一下如何正确安装封箱机胶带。 1、带卷安装要牢靠。封箱机胶带卷的固定是靠3个卡簧来…

Tesla P40千元级大显卡主机装机实践

序 随着chatglm2-6b,llama-7b等模型的开源&#xff0c;早就想要在消费级显卡&#xff0c;独立体验一下部署大模型的感觉&#xff0c;尽管在一些商用云平台上部署实践过&#xff0c;总是觉得缺少点什么&#xff0c;而且它们是按小时收费。 尤其是阿里的通义千问7B开源&#xff…

PYQT制作动态时钟

所有代码&#xff1a; import sys from PyQt5.QtCore import Qt, QTimer, QRect from PyQt5.QtGui import QPixmap, QTransform, QPainter, QImage from PyQt5.QtWidgets import QApplication, QLabel from PyQt5 import uic import newdef adder():global iglobal angle_s, a…

【AAAI2023】Spatial-Spectral Transformer for Hyperspectral Image Denoising

论文&#xff1a;https://readpaper.com/paper/4694783227240398849 代码&#xff1a;https://github.com/MyuLi/SST 1、总体介绍 高光谱图像&#xff08;HSI&#xff09;去噪是后续HSI应用的关键预处理过程&#xff0c;但是基于CNN的方法需要在计算效率与非局部特征建模能力之…

如何使用ArcGIS Pro将等高线转DEM

通常情况下&#xff0c;我们拿到的等高线数据一般都是CAD格式&#xff0c;如果要制作三维地形模型&#xff0c;使用栅格格式的DEM数据是更好的选择&#xff0c;这里就为大家介绍一下如何使用ArcGIS Pro将等高线转DEM&#xff0c;希望能对你有所帮助。 创建TIN 在工具箱中选择“…

Redis学习 - 了解Redis(三)

1. 什么是缓存击穿、缓存穿透、缓存雪崩&#xff1f; 1.1 缓存穿透问题 先来看一个常见的缓存使用方式&#xff1a;读请求来了&#xff0c;先查下缓存&#xff0c;缓存有值命中&#xff0c;就直接返回&#xff1b;缓存没命中&#xff0c;就去查数据库&#xff0c;然后把数据库…

读书笔记-《ON JAVA 中文版》-摘要25[第二十二章 枚举]

文章目录 第二十二章 枚举1. 基本功能1.1 基本 enum 特性 2. 方法添加2.1 方法添加2.2 覆盖 enum 的方法 3 switch 语句中的 enum4. values 方法的神秘之处5. 实现而非继承6. 随机选择7. 使用接口组织枚举8. 使用 EnumSet 替代 Flags9. 使用 EnumMap10. 常量特定方法11. 本章小…

pcl--第六节 3D特征描述子

特征描述子 Feature Descriptor 是每个特征点独特的身份认证同一空间点在不同视角的特征点具有高度相似的描述子不同特征点的描述子差异性尽量大通常描述子是一个具有固定长度的向量 描述子可以分为以下几种类型&#xff1a;基于不变性的描述子、基于直方图的描述子、二进制描…

上万条童话故事儿童故事ACCESS\EXCEL数据库

虽然已经有《7千多儿童故事网ACCESS\EXCEL数据库》这种记录数的童话故事类数据&#xff0c;但是遇到了好采集的就总想采集下来&#xff0c;后续有时间或有需求可以再做合并等操作。 分类情况统计为&#xff1a; 儿童故事&#xff1a;儿童小故事&#xff08;1895&#xff09;、…

Cobra眼睛蛇-强大的Golang CLI框架,快速上手的脚手架搭建项目工具,详细安装和使用

Cobra眼睛蛇-强大的Golang CLI框架&#xff0c;快速上手的脚手架搭建项目工具&#xff0c;详细安装和使用。 阅读过k8s源码的同学&#xff0c;应该都知道k8s Scheduler、kubeadm、kubelet等核心组件的命令行交互全都是通过spf13写的Cobra库来实现。本文就来介绍下Cobra的相关概…

成都爱尔李晓峰医生解析“秋季干眼症”!该如何远离

秋高气爽?相较于夏天不然湿热难忍&#xff0c;气候逐渐干燥似乎“好过”了些。但干燥不见得都是好事&#xff0c;环境空气的干同时让人体呈现“燥”&#xff0c;如皮肤干燥、喉痒、口干、干咳、便秘等不适&#xff0c;就连眼睛也不能幸免。 由于眼部水分较其他季节蒸发快&…

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测&#…

STM32F407 串口使用DMA方式通信

DMA的原理&#xff0c;就是利用寄存器方式进行读写&#xff0c;这样的好处就是相对于中断触发&#xff08;往往一个字节字节的就中断一次&#xff09;&#xff0c;CPU中断次数大大降少&#xff0c;提高了效率&#xff0c;但也影响了实时性。总体来说&#xff0c;对于一般的应用…

系统安装(一)CentOS 7 本地安装

CentOS与Ubuntu并称为Linux最著名的两个发行版&#xff0c;但由于笔者主要从事深度学习图像算法工作&#xff0c;Ubuntu作为谷歌和多数依赖库的亲儿子占据着最高生态位。但最近接手的一个项目里&#xff0c;甲方指定需要在CentOS7上运行项目代码&#xff0c;笔者被迫小小cos了一…

VS Code时间轴插件:MarkWhen

文章目录 简介时间格式事件格式 简介 MarkWhen是一款文本转时间轴的工具&#xff0c;非常好用&#xff0c;也十分炫酷。可在VS Code中搜索插件MarkWhen&#xff0c;点击安装&#xff0c;然后新建一个.mw后缀的文件&#xff0c;就可以使用了&#xff0c;下面举一个简单的例子 …

嵌入式笔试面试刷题(day15)

文章目录 前言一、Linux中的主设备号和次设备号1.查看方法2.主设备号和次设备号的作用 二、软件IIC和硬件IIC的区别三、变量的声明和定义区别四、static在C和C中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题&#xff0c;希望大家坚持跟…

PyTorch深度学习实战(17)——多任务学习

PyTorch深度学习实战&#xff08;17&#xff09;——多任务学习 0. 前言1. 多任务学习1.1 多任务学习基本概念1.2 多任务学习优势 2. 模型与数据集分析2.1 模型分析2.2 数据集介绍 3. 实现年龄估计和性别分类小结系列链接 0. 前言 多任务学习( Multi-Task Learning, MTL )是一…

SpringCloud Alibaba 整合Sentinel的基本使用

文章目录 一、什么是Sentinel二、Sentinel 的主要特性1. 流量控制&#xff1a;2. 熔断降级&#xff1a;3. 实时监控&#xff1a;4. 规则配置&#xff1a;5. 集成方便&#xff1a; 三、Sentinel 分为哪几部分:1. 核心库&#xff08;Java 客户端&#xff09;2. 控制台&#xff08…