qsort函数及其使用的方法分解讲解

news2024/12/24 8:35:43

qsort函数
 默认排序升序
void qsort(void* base,//指向待排序数组的第一个元素的地址
           size_t num,//base指向数组中元素的个数
           size_t size,//base指向的数组中一个元素的大小,单位是字节
           int (*compar)(const void*,const void*)//函数指针,传递函数的地址
                 );//const void* p1,const void* p2
                  p1>p2   return>0的一个数字
                  p1<p2   return<0的一个数字
                  p1=p2   return=0的一个数字



const修饰,在左边和右边的区别
 
const放在*的左边,限制的是指针指向的内容,
也就是不能通过指针变量来修改它所指向的内容
但是指针变量本身是可以改变的
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//err
p = &m;//ok

const放在*的右边,限制的是指针变量本身,
指针不可以改变它的指向,
但是可以改变指针变量来修改它所指向的内容
int n = 10;
int m = 20;
int* const p = &n;
*p = 20;//ok
p = &m;//err



结构体访问需要的操作符
结构成员访问操作符有两个
.   结构体变量.成员名
->  结构体指针->成员名
struct Stu
{
    char name[20];
    int age;
};
int main()
{
    struct Stu s = { "zhangsan",20 };
    printf("%s %d\n", s.name, s.age);
    struct Stu* ps = &s;
    printf("%s %d\n",(*ps).name, (*ps).age);
    printf("%s %d\n", ps->name, ps->age);
    return 0;
}



strcmp
头文件#include<string.h>
比较两个字符串的大小
abcdef
||||
abcq
比较d的ASCII值和q的ASCII值
故d<q;
p1>p2  return >0
p1<p2  return <0
p1=p2  return =0

#include<stdio.h>
#include<string.h>
int cmp_int(const void* p1, const void* p2)
{
	if (*(int*)p1 > *(int*)p2)
		return 1;
	else if (*(int*)p1 < *(int*)p2)
		return -1;
	else
		return 0;
}
void print_arr(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}
//qsort测试整型的大小
void test1()
{
	int arr[10] = { 2,4,1,3,7,5,6,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	print_arr(arr, sz);
}
struct Stu
{
	char name[20];
	int age;
};
//qsort测试结构体的大小
//按照名字比较两个结构体数据
//名字是字符串,字符串比较大小用的是strcmp函数
int cmp_stu_by_name(const void* p1, const void* p2)
{
	return strcmp(((struct Stu*)p1)->name, ((struct Stu*)p2)->name);
}
void print_stu_by_name(struct Stu arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%10s %d\n", arr[i].name, arr[i].age);
	}
}
void test2()
{
	struct Stu arr[] = { {"zhangsan",20},{"wangwu",35},{"lisi",18} };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_stu_by_name);
	print_stu_by_name(arr, sz);
}

//按照年龄比较两个结构体数据
int cmp_stu_by_age(const void* p1, const void* p2)
{
	if (((struct Stu*)p1)->age > ((struct Stu*)p2)->age)
		return 1;
	else if (((struct Stu*)p1)->age < ((struct Stu*)p2)->age)
		return -1;
	else
		return 0;
}
void print_stu_by_age(struct Stu arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%10s %d\n", arr[i].name, arr[i].age);
	}
}
void test3()
{
	struct Stu arr[] = { {"zhangsan",20},{"wangwu",35},{"lisi",18} };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_stu_by_age);
	print_stu_by_age(arr, sz);
}
int main()
{
	printf("按照整型排序:\n");
	test1();
	printf("按照名字比较两个结构体数据:\n");
	test2();
	printf("按照年龄比较两个结构体数据:\n");
	test3();
	return 0;
}

输出结果:

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

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

相关文章

YOLO11改进|卷积篇|引入线性可变形卷积LDConv

目录 一、【LDConv】卷积1.1【LDConv】卷积介绍1.2【LDConv】核心代码 二、添加【LDConv】卷积2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【LDConv】卷积 1.1【LDConv】卷积介绍 下图是【LDCNV】的结构图&#xff0c;让我们简单分析…

Mysql高级篇(下)——主从复制

主从复制 一、概述二、作用&#x1f388; 场景示例&#x1f388; 综合示例 三、原理&#x1f388; 主从复制基本原则&#x1f388; 主从复制存在的问题 四、一主一从架构搭建&#x1f331;准备工作&#x1f31e;步骤1. 配置主库&#xff08;Master&#xff09;2. 配置从库&…

如何搭建基于大模型的智能知识库

自从2022年底ChatGPT横空出世引爆了大模型技术浪潮&#xff0c;时至今日已经一年有余&#xff0c;如何从技术侧向商业侧落地转化是一直以来业内普遍关注的问题。 从目前企业端观察到的情况来看&#xff0c;基于大模型的知识库是一个比较有潜力和价值的应用场景&#xff0c;能够…

落伍警告:不了解AI Agent,你可能会被编程界淘汰

AI Agent火爆到什么程度&#xff1f; OpenAI创始人奥特曼预测&#xff0c;未来各行各业&#xff0c;每一个人都可以拥有一个AI Agent&#xff1b;比尔盖茨在2023年层预言&#xff1a;AI Agent将彻底改变人机交互方式&#xff0c;并颠覆整个软件行业&#xff1b;吴恩达教授在AI…

UE5 武器IK瞄准系统

创建空项目 创建基础蓝图类My_GameMode,My_HUD,My_PlayChar,My_PlayController 项目设置地图模式 近裁平面 0.1 My_PlayChar蓝图中添加摄像机,角色骨骼网格体,武器骨骼网格体 编辑角色骨骼,预览控制器使用特定动画,动画选择ANM_ark-47-Idle hand_r 添加插槽WeaponMes…

Stable Diffusion绘画 | 如何做到不同动作表情,人物角色保持一致性(下篇)

在 人物角色保持一致性&#xff08;上篇&#xff09;中&#xff0c;我们已经得到了自己创造的角色的各个角度头像图片&#xff1a; 从中选择一个符合自己需求的角度&#xff0c;截图保存&#xff0c;例如下图&#xff1a; 更换人物表情 进入到「图生图」页面&#xff0c;把上一…

短视频时代,网站建设存在的意义还有多大?

在短视频时代&#xff0c;网站建设的存在意义依然具有多方面的价值和作用。尽管短视频作为一种新兴的传播方式迅速发展并受到广泛欢迎&#xff0c;但网站作为互联网的基础设施之一&#xff0c;仍然在许多领域发挥着不可替代的作用。以下是具体分析&#xff1a; 信息深度与完整性…

医院管理新思维:Spring Boot技术应用

5系统详细实现 5.1 医生模块的实现 5.1.1 病床信息管理 医院管理系统的医生可以管理病床信息&#xff0c;可以对病床信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 病床信息管理界面 5.1.2 药房信息管理 医生可以对药房信息进行添加&#xff0c;修改&#xff0c;…

开源项目带来的思考

分享一位在Hacker News上的一个帖子&#xff0c;该开源作者在Github上年收入达到10万美元&#xff0c;你不得不承认&#xff0c;个人开源项目的影响力还是很大的。 这条帖子讲述了一位Laravel的开发者&#xff0c;是如何在Github上做到年收入10万美元。该帖子一发布&#xff0c…

rust使用tokio

Rust 是一种系统编程语言,它强调安全、并发和高性能。tokio 是一个基于 Rust 的异步运行时库,专门用于构建异步应用程序。使用 tokio 可以轻松地管理异步任务,并实现高效的并发。 添加依赖: cargo add tokio -F full 示例: 示例1: fn main() {let rt = tokio::runti…

RabbitMQ事务模块

目录 消息分发​​​​​​​ 负载均衡 幂等性保障 顺序性保障 顺序性保障方案 二号策略:分区消费 三号策略:消息确认机制 四号策略: 消息积压 RabbitMQ集群 选举过程 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制&#xff0c;要么全部成功&#xff0c;要么全…

软件设计师:03操作系统原理

文章目录 一、操作系统地位图二、前趋图&#xff08;PV操作&#xff09;三、移臂调度算法&#xff08;1&#xff09;最短移臂调度算法&#xff08;2&#xff09;先来先服务&#xff08;3&#xff09;最短寻道时间优先&#xff08;4&#xff09;扫描算法或电梯调度算法&#xff…

大模型~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/11566472 # From r to Q∗ 这就是OpenAI神秘的Q*&#xff1f;斯坦福&#xff1a;语言模型就是Q函数 近日&#xff0c;斯坦福大学一个团队的一项新研究似乎为这一研究方向的潜力提供了佐证&#xff0c;其声称现在已经取得非…

【Linux-基础IO】磁盘的存储管理详解

磁盘的存储管理 由于一个磁盘中包含了大量的扇区&#xff0c;为了方便管理&#xff0c;我们对磁盘进行了分区&#xff0c;其中每个分区又进一步划分为多个块组&#xff08;Block Group&#xff09;&#xff0c;每个块组中包含该块组的数据存储情况以及具体的数据 假设有一个8…

分层解耦-01.三层架构

一.对案例的思考 所有的代码都在这一个controller文件中&#xff0c;虽然该代码不复杂。但是如果针对大型项目&#xff0c;代码会很复杂。而且不利于项目的维护&#xff0c;复用性差。因此要修改该代码&#xff0c;使其满足维护方便&#xff0c;复用性好的特点。因此要用到一个…

VMware ESXi更改https的TLS协议版本

简要概述 TLS 1.0 和 1.1 是已弃用的协议&#xff0c;具有广为人知的缺点和漏洞。应在所有接口上启用 TLS 1.2&#xff0c;并在支持的情况下禁用 SSLv3、TL 1.1 和 1.0。强制要求 TLS 1.2 可能会破坏 vSphere 的第三方集成和加载项。在实施 TLS 1.2 后仔细测试这些集成&#x…

游戏报错x3daudio1_7.dll缺失怎么回事?总结几个有效解决方法分享

1. x3daudio1_7.dll 简介 1.1 定义 x3daudio1_7.dll 是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它与 Microsoft DirectX 音频组件紧密相关。该文件主要负责处理三维&#xff08;3D&#xff09;音频效果&#xff0c;提供给游戏和多媒体应用程序以增强用户体…

HDLBits中文版,标准参考答案 | 3.1.2 Multiplexers | 多路复用器

关注 望森FPGA 查看更多FPGA资讯 这是望森的第 9 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 2-to-1 multiplexer | 2 对 1 多路复用器 2 2-to-1 bus multiplexer | 2 对 1 总线多路复用器 3 9-to-1 multiplexer | 9 对 1 多路复用器 4 256-to-1 multiplexer | 256 对 …

CPU、GPU、显卡

CPU VS GPUCPU&#xff08;Central Processing Unit&#xff09;&#xff0c;中央处理器GPU&#xff08;Graphics Processing Unit&#xff09;&#xff0c;图形处理单元GPU 的技术演变CUDA&#xff08;Compute Unified Device Architecture&#xff09; 显卡&#xff08;Video…

【数据结构与算法】Greedy Algorithm

1) 贪心例子 称之为贪心算法或贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则&#xff0c;选取当前最优解因为没有考虑所有可能&#xff0c;局部最优的堆叠不一定让最终解最优 贪心算法是一种在每一步选择中都采取在当前状态下最好…