C语言-函数指针-快速排序算法(书籍示例-入门)
概述
使用C语言,实现结构体多元素,排序算法(冒泡排序),这里使用示例:书籍示例讲解
函数简介
函数声明
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
参数
base-- 指向要排序的数组的第一个元素的指针。
nitems-- 由 base 指向的数组中元素的个数。
size-- 数组中每个元素的大小,以字节为单位。
compar-- 用来比较两个元素的函数,即函数指针(回调函数)
编码环境:Visual Studio 2022
1、code
#include "stdio.h"
#include <iostream>
using namespace std;typedef struct BooksInfo_t {char name[20]; //书名char date[15]; //出版日期int number; //编号double price; //价格
}BooksInfo;#define ARRAYSIZE(x) sizeof(x) / sizeof(x[0])int Cmp_name(const void* o1, const void* o2) {//指针类型为qsort第一个参数的类型return strcmp(((BooksInfo*)o1)->name, ((BooksInfo*)o2)->name);
}int Cmp_date(const void* o1, const void* o2) {return strcmp(((BooksInfo*)o1)->date, ((BooksInfo*)o2)->date);
}int Cmp_number(const void* o1, const void* o2) {return ((BooksInfo*)o1)->number - ((BooksInfo*)o2)->number;
}int Cmp_price(const void* o1, const void* o2) {double tmp = ((BooksInfo*)o1)->price - ((BooksInfo*)o2)->price;if (tmp > 0)return 1;else if (tmp == 0)return 0;else if (tmp < 0)return -1;
}void Show(BooksInfo* info, int len)
{for (int i = 0; i < len; i++){printf("%s, %s, %d, %lf\n", info[i].name, info[i].date, info[i].number, info[i].price);}
}int main(void)
{//初始化书籍结构体BooksInfo book[] = {"C ", "2022.1.23", 20, 85.5,"C++ ", "2023.4.28", 19, 96.5,"Java ", "2000.8.09", 5, 102.5,"Python", "2019.3.02", 92, 65.8,"C# ", "2024.12.5", 7, 155.9};//按书名排序qsort(book, ARRAYSIZE(book), sizeof(book[0]), Cmp_name);printf("按书名排序:\n");Show(book, ARRAYSIZE(book));//按出版日期排序qsort(book, ARRAYSIZE(book), sizeof(book[0]), Cmp_date);printf("按出版日期排序:\n");Show(book, ARRAYSIZE(book));//按编号排序printf("按编号排序:\n");qsort(book, ARRAYSIZE(book), sizeof(book[0]), Cmp_number);Show(book, ARRAYSIZE(book));//按价格排序qsort(book, ARRAYSIZE(book), sizeof(book[0]), Cmp_price);printf("按价格排序:\n");Show(book, ARRAYSIZE(book));return 0;
}
2、运行结果
3、总结
希望能帮助到需要的人,加油,噢力给 ^_^!!!
相关文章:

C语言-函数指针-快速排序算法(书籍示例-入门)
概述 使用C语言,实现结构体多元素,排序算法(冒泡排序),这里使用示例:书籍示例讲解 函数简介 函数声明 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参…...
# 计算机视觉入门
## 概述 计算机视觉(Computer Vision)是人工智能的重要分支领域,它关注于如何使计算机“看”懂图像或视频内容,并从中提取有用信息,对视觉数据进行处理和理解。随着深度学习技术的兴起,计算机视觉领域取得…...

React - 你知道useffect函数内如何模拟生命周期吗
难度级别:中级及以上 提问概率:65% 很多前端开发人员习惯了Vue或者React的组件式开发,熟知组件的周期过程包含初始化、挂载完成、修改和卸载等阶段。但是当使用Hooks做业务开发的时候,看见一个个useEffect函数,却显得有些迷茫,因为在us…...
电子元器件批发商的市场营销策略与推广技巧
引言 电子元器件批发商面临激烈的市场竞争,有效的市场营销策略和推广技巧对于提升品牌知名度、吸引客户和促进销售至关重要。本文将探讨电子元器件批发商的市场营销策略与推广技巧,助力企业在竞争激烈的市场中取得成功。 1. 精准定位目标客户 行业细分…...

大型语言模型(LLMs)面试常见问题解析
概述 这篇文章[1]是关于大型语言模型(LLMs)的面试问题和答案,旨在帮助读者准备相关职位的面试。 token? 在大型语言模型中,token 指的是什么? 分词(Tokenization):可以将…...
【接口】HTTP(2) |请求方法及状态码
1、HTTP常用请求方法 get:获取资源或指定的数据 请求指定的页面信息,返回实体主体(查询) post:发送数据给服务器,创建或更新资源 put:创建/替换目标资源 delete:删除资源 get …...

CSS设置网页颜色
目录 前言: 1.颜色名字: 2.十六进制码: 3.RGB: 4.RGBA: 5.HSL: 1.hue: 2.saturation: 3.lightness: 6.HSLA: 前言: 我们在电脑显示器&…...

R语言数据操纵:常用函数
目录 处理循环的函数 lapply函数 apply函数 mapply函数 tapply函数 split函数 排序的函数 sort函数与order函数 总结数据信息的函数 head函数与tail函数 summary函数 str函数 table函数 any函数 all函数 xtab函数 object.size函数 这篇文章主要介绍R语言中处理…...
图论做题笔记:bfs
Leetcode - 433:最小基因变化 题目: 基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 A、C、G 和 T 之一。 假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化…...
群集服务器与主机托管区别
1、首先什么群集服务器? 通俗的来说,它是指很多台服务器把它们集中在一起来进行同一种服务,而在我们在客户端看,却只能看见一个服务器;集群服务器也可以由很多个的计算机并行去计算,这样可以获得非常高的计算速度;同时也可以用很多个计算机来…...

Linux锁的使用
一、临界资源与临界区 多线程会共享例如全局变量等资源,我们把会被多个执行流访问的资源称为临界资源,我们是通过代码访问临界资源的,而我们访问临界资源的那部分代码称为临界区。 实现一个抢票系统 只有一个线程抢票时 #include <ios…...
go语言学习--2.函数
目录 1.函数分类 2.函数的声明和定义 3.函数传参 4.函数返回值 5.递归调用 为完成某一功能的程序指令(语句)的集合,称为函数。 1.函数分类 在Go语言中,函数是第一类对象,我们可以将函数保持到变量中。函数主要有具名和匿名之分&#x…...
[安卓逆向]常见调试和反调试及解决方案
写在前面 我们在逆向软件时难免会遇到一些反调试策略,这篇文章就来详细总结下,现阶段比较流行的几种反调试策略及解决方案。 特定文件检测 反调试功能: 通过检测文件方式,检测android_server文件是否存在设备中的指定目录/data/l…...

uni-app(H5)论坛 | 社区 表情选择 UI组件
项目源码请移步:bbs 效果 实现思路 表情切换 人物、动物、小黄人不同表情之间的切换实际就是组件的切换 emoji表情 emoji表情本身就是一种字符 如需其他emoji表情可参考 EmojiAll中文官方网站 需要注意的就是数据库的存储格式需要支持emoji表情,我项…...

基于SpringBoot+vue的在线商城系统+论文+免费远程调试
基于SpringBootvue的在线商城系统034(含源码 数据库文档免费送) 开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springb…...

mac中创建的证书提示是无效或者是证书不受信任的解决办法
mac中创建的证书提示是无效或者是证书不受信任的解决办法 原因: (1)可能是由于自己的误删除将Apple worldwide Developer Relatioans Certification Authority删除掉了 (2) 由于签发的认证的证书到期了 (3)其它未知原…...

LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题
背景 楼主决定提升与LLM交互的质量,之前是直接prompt->answer的范式,现在我希望能用上ReAct策略和能够检索StackOverflow,让同一款LLM发挥出更大的作用。 难点 1. 怎样调用StackOverflow step1 pip install stackspi step 2 from la…...

老子云、AMRT3D、眸瑞科技
老子云概述 老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 1、基…...

2023.4.7 机器学习周报
目录 引言 Abstract 文献阅读 1、题目 2、引言 3、过去方案和Motivation 4、Segment Anything模型 5、创新点 6、实验过程 7、实验结果 1、评价绩效 2、检测评价 3、跟踪评价 8、 结论 总结 引言 本周阅读了一篇关于高效的任意分割模型的文献,用于自…...

如何将平板或手机作为电脑的外接显示器?
先上官网链接:ExtensoDesk 家里有一台华为平板,自从买回来以后除了看视频外,基本没什么作用,于是想着将其作为我电脑的第二个屏幕,提高我学习办公的效率,废物再次利用。最近了解到华为和小米生态有多屏协同…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...