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、总结

        希望能帮助到需要的人,加油,噢力给 ^_^!!! 

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

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

相关文章

初识23种设计模式:分类、原理与实际应用

目录 1. 简介2. 设计模式的分类概述3. 设计模式详解3.1 创建型模式&#xff08;共5种&#xff09;3.1.1 单例模式&#xff08;Singleton&#xff09;3.1.2 工厂方法模式&#xff08;Factory Method&#xff09;3.1.3 抽象工厂模式&#xff08;Abstract Factory&#xff09;3.1.…

oracle 中的大页无法使用问题

oracle 中的大页问题 今天巡检数据库的时候&#xff0c;发现有一个备库节点上的负载很大。这个备库基本无人使用。仅做延时查询使用&#xff0c;按理来说不应该有这么大负载&#xff0c; 环境说明 11.2.0.4 单节点dg库。 问题 大页不生效。且数据库所在服务器负载极大 top…

高并发环境下的实现与优化策略

在现代互联网应用中&#xff0c;高并发处理能力是衡量系统性能和稳定性的关键指标之一。尤其对于电商、社交、在线支付等业务场景&#xff0c;面对瞬间涌入的大规模用户请求&#xff0c;如何保证系统的稳定性和响应速度&#xff0c;对技术架构设计与优化提出了极高要求。本文将…

【Linux】Supervisor 基础

要在Linux上启动Supervisor&#xff0c;你可以按照以下步骤进行操作&#xff1a; 确保你已经安装了Supervisor。使用适合你的Linux发行版的包管理器进行安装。例如&#xff0c;对于Ubuntu&#xff0c;可以运行以下命令安装Supervisor&#xff1a; sudo apt-get update sudo apt…

在Java应用程序中嵌入百度地图的实现方法

在许多应用程序中&#xff0c;展示地图是一个常见的需求&#xff0c;特别是对于需要展示位置信息或者导航功能的应用。百度地图是一种常用的地图服务&#xff0c;本文将介绍如何在Java应用程序中嵌入百度地图&#xff0c;并提供一个简单易懂的示例代码。 1. 准备工作 在开始之…

Leetcode:283.移动零

题目要求 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0…

OAuth2.0客户端和服务端Java实现

oauth2 引言 读了《设计模式之美》和《凤凰架构》架构安全篇之后&#xff0c;决定写一个OAuth2.0的认证流程的Demo&#xff0c;也算是一个阶段性的总结&#xff0c;具体原理实现见《凤凰架构》(架构安全设计篇)。 涉及到的源码可以从https://github.com/WeiXiao-Hyy/oauth2获…

Digicert 证书

一、简介 在当今数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着网络攻击和数据泄露事件的频发&#xff0c;企业和组织越来越重视保护自己的网络环境。在这种背景下&#xff0c;数字证书成为了确保网络通信安全的关键工具。作为数字证书行业的领导者&#xff0c;Di…

2024.4.9记——C++多线程系列文章(五)之死锁

引言 如果用单一的全局互斥保护所有共享数据&#xff0c;也即锁的粒度过大&#xff0c;例如在共享大量数据的系统中&#xff0c;这么做会消除并发带来的任何性能优势&#xff0c;原因是多线程系统由此受到强制限定&#xff0c;任意时刻都只准许运行其中一个线程&#xff0c;即…

python应援灯牌代码

代码如下 import pygame import sys import random# 初始化Pygame pygame.init()# 设置窗口尺寸 WINDOW_WIDTH 800 WINDOW_HEIGHT 600 window_surface pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption(应援语跑马灯模拟)# 定义颜色 WH…

Web API(六)之正则表达式

Web API(六)之正则表达式 正则表达式正则基本使用元字符边界符量词范围字符类替换和修饰符change 事件判断是否有类正则表达式 正则表达式(Regular Expression)是一种字符串匹配的模式(规则) 使用场景: 例如验证表单:手机号表单要求用户只能输入11位的数字 (匹配)过滤…

利用AI开源引擎:文本自动摘要提取API (可本地化部署)

新闻摘要提取技术是一种高效的自然语言处理技术&#xff0c;它通过算法对新闻文章进行全面的语义理解和分析&#xff0c;自动抽取文章中的关键信息&#xff0c;生成简洁、连贯的摘要文本。该技术在多个领域都有着广泛的应用&#xff0c;下面将深入探讨其主要的应用场景。 开源项…

【接口】HTTP(4)|Session、Cookie、token有什么区别?

HTTP是一种无状态的协议&#xff0c;服务器本身没有记忆功能&#xff0c;无法记住客户端之前是否有发送过请求&#xff0c;因此客户端每次发送的请求都是独立的 无状态&#xff1a;HTTP是一个无状态的协议。这句话里的无状态是什么意思&#xff1f; - 知乎 1、为什么需要cookie…

Rust通用代码生成器莲花,红莲尝鲜版二十二,发布数据库自动反射新功能及其视频

Rust通用代码生成器莲花&#xff0c;红莲尝鲜版二十二&#xff0c;发布数据库自动反射新功能及其视频 Rust 通用代码生成器莲花&#xff0c;红莲尝鲜版二十二&#xff0c;此版本新增了数据库自动反射功能&#xff0c;可以为遗留数据库配上操作软件。此版本增强了模板向导界面的…

LINUX 下IPTABLES配置详解

-t<表>&#xff1a;指定要操纵的表&#xff1b; -A&#xff1a;向规则链中添加条目&#xff1b; -D&#xff1a;从规则链中删除条目&#xff1b; -i&#xff1a;向规则链中插入条目&#xff1b; -R&#xff1a;替换规则链中的条目&#xff1b; -L&#xff1a;显示规则链中…

MQ中的交换机与队列

交换机与队列的介绍 1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff…

最简单知识点PyTorch中的nn.Linear(1, 1)

一、nn.Linear(1, 1) nn.Linear(1, 1) 是 PyTorch 中的一个线性层&#xff08;全连接层&#xff09;的定义。 nn 是 PyTorch 的神经网络模块&#xff08;torch.nn&#xff09;的常用缩写。 nn.Linear(1, 1) 的含义如下&#xff1a; 第一个参数 1&#xff1a;输入特征的数量…

【人工智能】AI赋能城市交通 未来城市的驱动力

前言 随着城市化进程的不断加速&#xff0c;交通拥堵、环境污染等问题日益凸显&#xff0c;人们对交通系统的效率和可持续性提出了更高的要求。在这样的背景下&#xff0c;智能交通技术正成为改善城市交通的重要驱动力。本文将探讨智能交通技术在解决城市交通挑战方面的应用和未…

为什么要在 Golang 中使用指针

1、性能优化&#xff1a;指针允许你在不复制数据的情况下访问和修改变量。当你有一个大型的数据结构时&#xff0c;如果直接传递这个数据结构&#xff0c;会产生一个完整的副本&#xff0c;这会增加内存的使用和CPU的计算时间。使用指针&#xff0c;你可以只传递数据的地址&…

谷歌留痕霸屏要怎么做?

谷歌留痕霸屏&#xff0c;就是让你的网站或者页面在谷歌搜索结果里尽可能多地出现&#xff0c;就像是在你的潜在客户眼前留下深刻印象一样&#xff0c;你要做的就是在一些高权重平台发布有价值的信息&#xff0c;同时巧妙地留下你的品牌名、产品名或者任何你想要推广的关键词&a…