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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一维差分数组

797. 差分 输入一个长度为 n 的整数序列。接下来输入 m 个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数 n和 m 第二行包含 n个整数&#xff0c;表示整数序…

Redis Stack 安装部署

参考&#xff1a;Run Redis Stack on Docker | Redis Redis-stack 初体验_redis stack-CSDN博客 【docker】运行redis_docker run redis-stack-server requirepass-CSDN博客 Redis Stack 是一组软件套件&#xff0c;它主要由三部分组成。 一个是 Redis Stack Server&#x…

【HTB】 OpenSource

OpenSource 靶机地址&#xff1a;https://app.hackthebox.com/machines/471 信息收集 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV -p- 10.129.212.208 --min-rate5000 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-08 16:01 CST Nmap scan report f…

Nginx服务 重写功能与反向代理

六、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的…

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换坐标转换是游戏开发过程中必不可少的环节 看下图 世界坐标、屏幕坐标、UI 坐标 三种坐标系的转换过程&#xff0c;此文章中的 UI 坐标特指 UGUI 坐标 从上图可以看到&#xff0c;世界坐标 和 UI 坐标 需要通过 屏幕坐标作为中间转…

MemberPress配置和使用会员登录页面

目录 隐藏 创建会员登录页面 编辑登录页面 设计您的登录页面 链接到您的登录页面 创建会员登录页面 要创建MemberPress会员登录页面&#xff0c;您需要做的就是导航到 MemberPress > 设置 > 页面选项卡&#xff0c;然后在页面顶部附近的“MemberPress 登录页面”…

面试官脑子有病系列:为什么 HashMap 是线程不安全的?

文章目录 前言HashMap为啥线程不安全&#xff1f;HashMap线程不安全的根本原因put 方法中的非原子性操作扩容时的非原子性操作 安全的HashMap总结 前言 Hi&#xff0c;大家好&#xff0c;我是王二蛋。 我们在面试的时候&#xff0c;经常会被问到一些有的没的、看似高深但与日…

科技型中小企业怎么做

在当今快速发展的科技时代&#xff0c;科技型中小企业扮演着越来越重要的角色。这些企业不仅推动了技术创新&#xff0c;还为经济增长和社会进步做出了巨大贡献。那么&#xff0c;科技型中小企业应如何制定并执行其发展战略呢&#xff1f; 1. 明确定位与战略规划 对于任何企业…

SD-WAN为出海电商提供了什么支持

出海电商行业的持续发展与壮大&#xff0c;使得网络连接的稳定性和效率成为其成功的关键因素。SD-WAN&#xff08;软件定义广域网&#xff09;作为一种先进的网络解决方案&#xff0c;为出海电商提供了诸多优势和支持。 首先&#xff0c;SD-WAN通过智能路由技术&#xff0c;能够…

华火电焰灶测评:电焰灶十大品牌哪个好?实力排名怎么样?

华火新能源电焰灶作为现代厨房技术的一大创新&#xff0c;近年来受到了广泛关注。在新能源电焰灶市场中&#xff0c;目前只有华火品牌具有独立研发、独立生产、品质背书、完善服务等雄厚的综合实力&#xff1b;而华火品牌凭借其独特的技术和优势&#xff0c;与其他传统燃气灶品…

EDM邮件群发推广多少钱?有哪些优势?

电子邮件营销&#xff08;Electronic Direct Mail, EDM&#xff09;以其高性价比、精准定向与可度量效果的优势&#xff0c;成为众多企业不可或缺的营销策略。云衔科技&#xff0c;作为企业数字广告营销和SaaS软件服务的领军者&#xff0c;以其创新的智能EDM邮件营销系统解决方…

2024 工业物联网通信与网络安全国际学术会议(IIOTNS 2024)

【会议英文官网】&#xff1a;www.iiotns2024.org 【会议时间】&#xff1a; 2024年5月10-12日 【一轮截稿时间】&#xff1a; 2024年3月10-12日 所有于一轮截稿时间之前投稿&#xff0c;后续通过审核并被大会录用的稿件享早鸟优惠&#xff1a;单篇立减400元&#xff01;&am…

如何快速识别陶瓷件的外观缺陷吗?

陶瓷件由陶瓷材料制成的物品或零部件&#xff0c;通常用于装饰、日常生活用品、工艺品或工业应用。陶瓷是一种非金属材料&#xff0c;具有耐高温、耐磨损、绝缘、化学稳定等特性&#xff0c;因此在许多领域得到广泛应用。 本案针对陶瓷件尺寸长25mm*宽11mm*高2mm的产品的外观检…

HarmonyOS 应用开发-ArkUI事件机制

ArkUI提供了事件机制&#xff0c;这些事件提供了不同的信息用于处理程序交互逻辑&#xff0c;ArKUI事件按照功能来讲&#xff0c;可以分为以下几种&#xff1a; 点击事件触摸事件挂载卸载事件拖拽事件按键事件焦点事件鼠标事件组件区域变化事件组件可见区域变化事件组件快捷键…

C++ primer 第十八章

C语言的三大特性&#xff1a;异常处理、命名空间、多重继承。 1.异常处理 异常处理机制允许我们能够将问题的检测与解决过程分离开来。 1.1、抛出异常 在C语言中&#xff0c;我们通过抛出一条表达式来引发一个异常。 当执行一个throw时&#xff0c;程序的控制权从throw转移…

T527 Qt 触摸 ----- TSLIB

一、调试 1、驱动路径 bsp/drivers/input/ctp/gt9xx/gt9xx_ts.c 2、硬件接口 挂载在TWI0下 3、中断复位脚 4、设备树 &twi0 {clock-frequency <400000>;pinctrl-0 <&twi0_pins_default>;pinctrl-1 <&twi0_pins_sleep>;pinctrl-names &quo…

SpringBoot 定时任务实践、定时任务按指定时间执行

Q1. springboot怎样创建定时任务&#xff1f; 很显然&#xff0c;人人都知道&#xff0c;Scheduled(cron ".....") Q2. 如上所示创建了定时任务却未能执行是为什么&#xff1f; 如果你的cron确定没写错的话 cron表达式是否合法&#xff0c;可参考此处&#xff0c…

MAC苹果电脑如何使用Homebrew安装iperf3

一、打开mac终端 找到这个终端打开 二、终端输入安装Homebrew命令 Homebrew官网地址&#xff1a;https://brew.sh/ 复制这个命令粘贴到mac的终端窗口&#xff0c;然后按回车键 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/in…

ModuleNotFoundError: No module named ‘ultralytics.utils‘

项目场景he 问题描述 提示&#xff1a;这里简述项目相关背景&#xff1a; model YOLO(modelr./yolov8m-cls.pt) 加载预训练模型时报错。 ModuleNotFoundError: No module named ultralytics.utils warning: bug: 原因分析&#xff1a; 很可能是提前下载的预训练模型出了…

川川本人著作《Python3编程从零基础到实战》

在数字时代&#xff0c;Python已经成为了一种极为强大和灵活的编程语言&#xff0c;它的应用范围从网站开发到数据科学&#xff0c;再到机器学习和人工智能。无论你是一名编程新手还是希望深化已有技能的开发者&#xff0c;《Python3编程从零基础到实战》将成为你通往Python世界…