当前位置: 首页 > news >正文

用冒泡排序法模拟qsort函数

目录

1.前言

2.qsort函数的介绍

​3.冒泡法回顾

4.模拟qsort---buble_sort

4.1 buble_sort格式

4.2 主函数,以int类型为例

4.3comp_int函数的功能设计

4.4 swap函数的功能设计

5. 总代码概览


1.前言

今天,小邓儿带大家用冒泡排序法来模拟一下qsort函数,废话不都说,咱们开整。

2.qsort函数的介绍

void qsort( void *base,     //指向的要比较数组的起始地址

                     size_t num,   // 数组大小(元素总数)

                     size_t width,   //数组中一个元素的大小(单位字节)

                      int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

                     //比较elem1和elem2的大小,下图为qsort函数第4个参数的描述 

3.冒泡法回顾​​​​​​​

一共进行sz-1趟循环,每一趟又依次比较一个数和它后面一个数的大小,最终按从小到大的默认顺序进行排列。

4.模拟qsort---buble_sort

4.1 buble_sort格式

void bubble_sort(void* base,
                             int sz,
                             int width,
                             int(*comp)(const void*, const void*));

具体函数内部情况如下图

这里的bublue_sort函数,先是会调用comp函数进行两个数的比较,经过判断后,再会调用swap函数进行交换

4.2 主函数,以int类型为例

现在,咱们需要用comp_int来模拟实现compare函数的功能。

4.3comp_int函数的功能设计

int comp_int(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}

//这里参考下图compare的功能

Return ValueDescription
< 0elem1 less than elem2
0elem1 equivalent to elem2
> 0

elem1 greater than elem2

4.4 swap函数的功能设计

5. 总代码概览

#include<stdio.h>
#include<string.h>
int comp_int(const void* e1, const void* e2)
{return *(int*)e1 - *(int*)e2;
}
void swap(char* e1, char* e2, int width)
{int i = 0;for (i = 0; i < width;i++){int t = *e1;*e1 = *e2;*e2 = t;e1++;e2++;}
}
void bubble_sort(void* base,int sz,int width,int(*comp)(const void*, const void*))//传过来的形参是指针
{int i, j;for (i = 0; i < sz - 1; i++){int flag = 1;//按从小到大顺序排列for (j = 0; j < sz - 1 - i; j++){if (comp((char*)base + j * width, (char*)base + (j + 1) * width )>0)//comp的实参是两个地址{swap((char*)base + j * width, (char*)base + (j + 1) * width,width);flag = 0;//未按顺序排列}}if (flag == 1){break;}}
}
void Print(int arr[], int sz)
{int i = 0;for (i = 0; i < sz - 1; i++){printf("%d ", arr[i]);}printf("\n");return 0;
}
int main()
{int arr[] = { 1,2 ,4 ,3, 6,5,7,9,0 };int sz ;sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz, sizeof(arr[0]), comp_int);Print(arr,sz);
}

好了,小邓儿今天的分享就到这里了,欢迎老铁们点赞收藏😄😄😄

相关文章:

用冒泡排序法模拟qsort函数

目录 1.前言 2.qsort函数的介绍 ​3.冒泡法回顾 4.模拟qsort---buble_sort 4.1 buble_sort格式 4.2 主函数&#xff0c;以int类型为例 4.3comp_int函数的功能设计 4.4 swap函数的功能设计 5. 总代码概览 1.前言 今天&#xff0c;小邓儿带大家用冒泡排序法来模拟一下qs…...

DCN讲解

DCN是DeepFM的升级版&#xff0c;后者是只能做二阶交叉特征&#xff0c;随着阶数上升&#xff0c;模型复杂度大幅提高&#xff0c;且FM网络层较浅&#xff0c;表达能力有限。google团队通过构建深度交叉网络来自动进行特征的高阶交叉&#xff0c;且时空复杂度均为线性增长&…...

nginx的作用和应用场景

Nginx 是一款高性能的开源 Web 服务器和反向代理服务器&#xff0c;以其高效处理高并发连接和低资源消耗著称。以下是其核心作用及典型应用场景的详细解析&#xff1a; 一、Nginx 的核心作用 1. 静态资源服务器 功能&#xff1a;直接托管 HTML、CSS、JavaScript、图片等静态文…...

[Lc滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数

目录 1. 长度最小的字数组 题解 代码 ⭕2.无重复字符的最长子串 题解 代码 3.最大连续1的个数 III 题解 代码 4.将 x 减到 0 的最小操作数 题解 代码 1. 长度最小的字数组 题目链接&#xff1a;209.长度最小的字数组 题目分析: 给定一个含有 n 个 正整数 的数组…...

基于python的网络爬虫爬取天气数据及可视化分析(Matplotlib、sk-learn等,包括ppt,视频)

基于Python爬取天气数据信息与可视化分析&#xff08;文末完整源码&#xff09; 基于python的网络爬虫爬取天气数据及可视化分析 可以看看演示视频。 摘要 基于Python爬取天气数据信息与可视化分析 本论文旨在利用Python编程语言实现天气数据信息的爬取和可视化分析。天气…...

【缓存】缓存雪崩与缓存穿透:高并发系统的隐形杀手

缓存雪崩与缓存穿透&#xff1a;高并发系统的隐形杀手 在高并发系统中&#xff0c;缓存是提升性能的重要手段。然而&#xff0c;缓存使用不当也会带来一系列问题&#xff0c;其中最常见的就是缓存雪崩和缓存穿透。这两个问题如果不加以解决&#xff0c;可能会导致系统崩溃&…...

HTML AI 编程助手

HTML AI 编程助手 引言 随着人工智能技术的飞速发展&#xff0c;编程领域也迎来了新的变革。HTML&#xff0c;作为网页制作的基础语言&#xff0c;与AI技术的结合&#xff0c;为开发者带来了前所未有的便利。本文将探讨HTML AI编程助手的功能、应用场景以及如何利用它提高编程…...

李宏毅机器学习课程学习笔记04 | 浅谈机器学习-宝可梦、数码宝贝分类器

文章目录 案例&#xff1a;宝可梦、数码宝贝分类器第一步&#xff1a;需要定义一个含有未知数的function第二步&#xff1a;loss of a function如何Sample Training Examples > 如何抽样可以得到一个较好的结果如何权衡模型的复杂程度 Tradeoff of Model Complexity todo 这…...

AIGC(生成式AI)试用 26 -- 跟着清华教程学习 - DeepSeek与AI幻觉

目标&#xff1a;继续学习 个人理解&#xff1a; - AI幻觉&#xff1a;一本正经的胡说八道&#xff0c;你还觉得很道理&#xff0c;倾向于相信&#xff1b;事实不一致&#xff0c;指令(预期)与实际不一致&#xff1a;跑题 - 潜在风险&#xff1a;把AI带坏了&#xff1b;信息误…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump

ngx_conf_add_dump 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) {off_t size;u_char *p;uint32_t hash;ngx_buf_t *buf;ngx_str_node_t *sn;ngx_conf_dump_t *cd;has…...

QEMU源码全解析 —— 内存虚拟化(23)

接前一篇文章:QEMU源码全解析 —— 内存虚拟化(22) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 QEMU内存管理模型...

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…...

TypeScript 类型声明

在 TypeScript 开发中简化类型声明&#xff0c;可以通过以下 7 种实用技巧 显著提升效率&#xff1a; 一、善用类型推断&#xff08;30% 场景免声明&#xff09; // ❌ 冗余写法 const user: { name: string; age: number } { name: Jack, age: 25 };// ✅ 自动推断&#xff…...

从0搭建Tomcat第二天:深入理解Servlet容器与反射机制

在上一篇博客中&#xff0c;我们从0开始搭建了一个简易的Tomcat服务器&#xff0c;并实现了基本的HTTP请求处理。今天&#xff0c;我们将继续深入探讨Tomcat的核心组件之一——Servlet容器&#xff0c;并介绍如何使用反射机制动态加载和管理Servlet。 1. Servlet容器的作用 S…...

【Python】yield函数

【Python】yield函数 1. yield介绍2.yield基本用法3.yield高级用法3.1 yield send() 方法3.2 yield from方法3.3 yield 和yield from叠加处理复杂情况下的叠加 4.yield主要应用场景5.总结 python官方api地址 1. yield介绍 在Python中&#xff0c;yield关键字主要用于生成器函…...

Android13修改多媒体默认音量

干就完了! 设置音量为最大音量,修改如下: /framework/base/media/java/android/media/AudioSystem.java/** hide */public static int[] DEFAULT_STREAM_VOLUME new int[] {4, // STREAM_VOICE_CALL7, // STREAM_SYSTEM5, // STREAM_RING-5, // STREAM_MUSIC15, // STREAM…...

nginx+keepalived负载均衡及高可用

一、环境准备 主机名ip地址备注openEuler-1 192.168.121.11&#xff08;本机&#xff09; 192.168.131.11&#xff08;心跳连接&#xff09; nginx主负载均衡调度器openEuler-2 192.168.121.12&#xff08;本机&#xff09; 192.168.131.12&#xff08;心跳连接&#xff09; n…...

SP导入智能材质球

智能材质球路径 ...\Adobe Substance 3D Painter\resources\starter_assets\smart-materials 放入之后就会自动刷新...

Kotlin语言特性(一):空安全、扩展函数与协程

Kotlin语言特性&#xff08;一&#xff09;&#xff1a;空安全、扩展函数与协程 一、引言 Kotlin作为Android官方推荐的开发语言&#xff0c;相比Java具有诸多现代化特性。本文将重点介绍Kotlin三个最具特色的语言特性&#xff1a;空安全、扩展函数和协程&#xff0c;并结合A…...

Sqlserver安全篇之_启用TLS即配置SQL Server 数据库引擎以加密连接

官方文档 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/manage-certificates?viewsql-server-ver15&pre…...

六自由度工业机器人设计【说明书(论文)+CAD图纸+SolidWorks三维图+任务书+开题报告】

六自由度工业机器人作为现代自动化领域的核心装备&#xff0c;其设计需兼顾机械结构、运动控制与系统集成等多维度技术要求。该类机器人通过六个独立旋转轴的协同运动&#xff0c;可实现末端执行器在三维空间内的灵活定位与姿态调整&#xff0c;广泛应用于焊接、装配、搬运等工…...

CA6140车床杠杆831009钻M6孔夹具设计全套带图

CA6140车床作为机械加工领域的经典设备&#xff0c;其杠杆零件&#xff08;编号831009&#xff09;的加工精度直接影响整机性能。针对该零件M6螺纹孔的加工需求&#xff0c;专用夹具的设计需兼顾定位稳定性、操作便捷性与加工经济性。通过分析零件结构可知&#xff0c;杠杆两端…...

终极指南:如何用LocalVocal为OBS添加本地实时字幕系统

终极指南&#xff1a;如何用LocalVocal为OBS添加本地实时字幕系统 【免费下载链接】obs-localvocal OBS plugin for local speech recognition and captioning using AI 项目地址: https://gitcode.com/gh_mirrors/ob/obs-localvocal 还在为直播或视频录制中的字幕问题烦…...

2025届最火的六大AI辅助论文助手推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当下&#xff0c;学术研究愈发深入&#xff0c;AI论文工具成了科研人员和学生的得力帮手&…...

暗黑破坏神2存档修改终极指南:告别十六进制编辑,3步完成角色定制

暗黑破坏神2存档修改终极指南&#xff1a;告别十六进制编辑&#xff0c;3步完成角色定制 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款专为《暗黑破坏神2》玩家设计的Web存档编辑器&#xff0c;通过直观的可视…...

ExtractorSharp:突破游戏资源编辑壁垒,打造个性化补丁的全能工具

ExtractorSharp&#xff1a;突破游戏资源编辑壁垒&#xff0c;打造个性化补丁的全能工具 【免费下载链接】ExtractorSharp Game Resources Editor 项目地址: https://gitcode.com/gh_mirrors/ex/ExtractorSharp 你是否曾因找不到合适工具而放弃定制游戏角色外观&#xf…...

终极指南:如何无需Steam客户端轻松下载创意工坊模组

终极指南&#xff1a;如何无需Steam客户端轻松下载创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾因Steam客户端无法访问创意工坊而烦恼&#xff1f;或者…...

如何快速解锁QQ音乐加密格式:面向普通用户的完整音频解密指南

如何快速解锁QQ音乐加密格式&#xff1a;面向普通用户的完整音频解密指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump …...

5步实现图表数据提取自动化:用WebPlotDigitizer提升科研效率80%

5步实现图表数据提取自动化&#xff1a;用WebPlotDigitizer提升科研效率80% 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 还在为手动…...

当创意遭遇围墙:AO3镜像站的破局与共建指南

当创意遭遇围墙&#xff1a;AO3镜像站的破局与共建指南 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 问题象限&#xff1a;当同人爱好者遇上访问壁垒 解读创作自由的数字鸿沟 想象这样一个场景&#xff1a;深夜的…...