追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序
追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序 ~😎
- 前言🙌
- 堆的应用 —— 堆排序算法:
- 堆排序算法源代码分享
- 运行结果测试截图:
- 总结撒花💞
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!
😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
前言🙌
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,手把手带领大家追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序~ 都是精华内容,可不要错过哟!!!😍😍😍
堆的应用 —— 堆排序算法:
堆排序即利用堆的思想来进行排序,总共分为两个步骤:
- 建堆
升序:建大堆
降序:建小堆 - 利用堆删除思想来进行排序建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。
- 利用向上调整建堆的时间复杂度:O(n*logn);
- 利用向下调整建堆的时间复杂度:O(n);
因此,在堆排序中应用向下调整算法要优于向上调整算法。所有结点的排序调整部分也是O(n*logn).
最优的堆排序为: O(n + n*logn)。
堆排序算法源代码分享
#include<stdio.h>
void Swap(int* p1, int* p2)
{int tem = *p1;*p1 = *p2;*p2 = tem;
}//建小堆
//void AdjustDown(int* a, int size, int parent)
//{
// int child = parent * 2 + 1;
// while (child < size)
// {
// if (child + 1 < size && a[child + 1] < a[child])
// {
// child++;
// }
//
// if (a[child] < a[parent])
// {
// Swap(&(a[parent]), &(a[child]));
// parent = child;
// child = parent * 2 + 1;
// }
// else
// {
// break;
// }
// }
//}
//建大堆
void AdjustDown(int* a, int size, int parent)
{int child = parent * 2 + 1;while (child < size){if (child + 1 < size && a[child + 1] > a[child]){child++;}if (a[child] > a[parent]){Swap(&(a[parent]), &(a[child]));parent = child;child = parent * 2 + 1;}else{break;}}
}void HeapSort(int* a, int size)
{//排降序 -- 建小堆/*for (int i = (size - 1 - 1) / 2; i >= 0; i--){AdjustDown(a, size, i);}*///排升序 -- 建大堆for (int i = (size - 1 - 1) / 2; i >= 0; i--){AdjustDown(a, size, i);}//排序int end = size - 1;while (end > 0){Swap(&(a[0]), &(a[end]));AdjustDown(a, end, 0);end--;}
}int main()
{int a[6] = { 22,33,222,1,2,55 };HeapSort(a, 6);for (int i = 0; i < 6; i++){printf("%d ", a[i]);}printf("\n");return 0;
}
运行结果测试截图:

总结撒花💞
本篇文章旨在分享详解小白如何使用C语言实现堆数据结构。希望大家通过阅读此文有所收获!
😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘
相关文章:
追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序
追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序 ~😎 前言🙌堆的应用 —— 堆排序算法:堆排序算法源代码分享运行结果测试截图: 总结撒花💞 😎博客昵称:博客小梦 ὠ…...
python版pytorch模型转openvino及调用
一、openvino安装 参看官方文档https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html 安装命令是根据上面的选择生成。这里安装了pytorch和onnx依赖。 二、pytorch模型转opnvino模型推理 import os import time import cv2 import nu…...
TensorFlow 机器学习秘籍第二版:9~11
原文:TensorFlow Machine Learning Cookbook 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何…...
【苏州数字力量】面经 base上海
文章目录 【苏州数字力量】面经 base上海Java基础面1.说一下常见的数据类型、大小、以及他们的封装类2.重载和重写的区别3.谈谈Java的引用方式4.String有些什么方法5.String、StringBuffer、StringBuilder的区别是什么6.谈一下static有哪些用法7.谈一下常见的访问修饰符有哪些&…...
FVM链的Themis Pro(0x,f4) 5日IDO超百万美元,或让Filecoin逆风翻盘
交易一直是DeFi乃至web3领域最经久不衰的话题,也因此催生了众多优秀的去中心化协议,如Uniswap和Curve。这些协议逐渐成为了整个系统的基石。 在永续合约方面,DYDX的出现将WEB2时代的订单簿带回了web3。其链下交易的设计,仿佛回到了…...
webserve简介
目录 I/O分类I/O模型阻塞blocking非阻塞 non-blocking(NIO)IO复用信号驱动异步 webServerHTTP简介概述工作原理HTTP请求头格式HTTP请求方法HTTP状态码 服务器编程基本框架两种高效的事件处理模式Reactor模式Proactor模拟 Proactor 模式 线程池 I/O分类 …...
分析型数据库:MPP 数据库的概念、技术架构与未来发展方向
随着企业数据量的增多,为了配合企业的业务分析、商业智能等应用场景,从而驱动数据化的商业决策,分析型数据库诞生了。由于数据分析一般涉及的数据量大,计算复杂,分析型数据库一般都是采用大规模并行计算或者分布式计算…...
微服务高级篇学习【4】之多级缓存
文章目录 前言一 多级缓存二 JVM进程缓存2.1 案例导入2.1.1 使用docker安装mysql2.1.2 修改配置2.1.3 导入项目工程2.1.4 导入商品查询页面2.1.5 反向代理 2.2 初识Caffeine2.3 实现JVM进程缓存 三 Lua脚本入门3.1 安装Lua3.2 Lua语法学习 四 实现多级缓存4.1 OpenResty简介4.2…...
知乎版ChatGPT「知海图AI」加入国产大模型乱斗,称效果与GPT-4持平
“2023知乎发现大会”上,知乎创始人、董事长兼CEO周源和知乎合作人、CTO李大海共同宣布了知乎与面壁智能联合发布“知海图AI”中文大模型。 周源据介绍,知乎与面壁智能达成深度合作,共同开发中文大模型产品并推进应用落地。目前,知…...
邮件发送配置
QQ邮箱发送和接收配置: POP3/SMTP协议 接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995 发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465 海外用户可使用以下服务器 接收邮件服务器…...
【Open CASCADE -生成MFC和QT事例方式】
源代码目录 adm目录:包含编译OCCT的相关工程; adm/cmake目录:包含使用CMake构建OCCT的相关处理脚本; adm/msvc目录:包含window平台 Visual C 2010, 2012, 2013, 2015, 2017 and 2019等版本的32/64平台solutinon文件; data目录: 包…...
python 笔记:PyTrack(将GPS数据和OpenStreetMap数据进行整合)【官网例子解读】
论文笔记:PyTrack: A Map-Matching-Based Python Toolbox for Vehicle Trajectory Reconstruction_UQI-LIUWJ的博客-CSDN博客4 0 包的安装 官网的两种方式我都试过,装是能装成功,但是python import PyTrack包的时候还是显示找不到Pytrack …...
苦中作乐 ---竞赛刷题31-40(15-20)
(一)目录 L1-032 Left-pad L1-033 出生年 L1-034 点赞 L1-035 情人节 L1-039 古风排版 (二)题目 L1-032 Left-pad 根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法…...
100种思维模型之人类误判心理思维模型-49
“我们老得太快,聪明得太迟”——查理芒格。 2005年,81岁的查理芒格认为81岁的他能够比10年前做得更好。他决定对1992年2月2日、1994年10月6日和1995年4月24日的三次演讲稿进行修改,于是就有了这个人类误判心理思维模型——25条人类误判心理学…...
【从零开始学Skynet】实战篇《球球大作战》(十三):场景代码设计(下)
1、主循环 《球球大作战》是一款服务端运算的游戏,一般会使用主循环程序结构,让服务端处理战斗逻辑。如下图所示,图中的 balls 和 foods代表服务端的状态,在循环中执行“ 食物生成”“位置更新”和“碰撞检 测” 等功能࿰…...
2023年虚拟数字人行业研究报告
第一章 行业概况 虚拟数字人指存在于非物理世界中,由计算机图形学、图形渲染、动作捕捉、深度学习、语音合成等计算机手段创造及使用,并具有多种人类特征(外貌特征、人类表演能力、人类交互能力等)的综合产物。虚拟人可分为服务型…...
Oracle 之表的连接类型——舞蹈跳出
嵌套循环(Nested Loops Join) Oracle 中最基本的连接方法,用于处理数据表之间的连接操作。 嵌套循环是通过对其中一个表(外部表)进行全循环操作,然后针对每条记录在另一张表(内部表)…...
深入浅出JS定时器:从setTimeout到setInterval
前言 当谈到 JavaScript 编程语言最基本的概念时,定时器就是一个必须掌握的知识点。在编写网站时,你经常会遇到需要在一定时间间隔内执行一些代码的情况。这时候,JavaScript 定时器就可以派上用场了。 什么是定时器? JS 定时器是…...
CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结
文章目录 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结一、CountDownLatch二、CyclicBarrier三、Semaphore总结 CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结 在Java多线程编程中,有三种常见的同步工具类:CountDownL…...
企业电子招投标系统源码之了解电子招标投标全流程
随着各级政府部门的大力推进,以及国内互联网的建设,电子招投标已经逐渐成为国内主流的招标投标方式,但是依然有很多人对电子招投标的流程不够了解,在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同࿰…...
打破游戏边界:Sunshine构建你的无缝云游戏体验
打破游戏边界:Sunshine构建你的无缝云游戏体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想象一下这样的场景:你在客厅的智能电视上玩着3A大作&#x…...
应用篇,在Silverlight中使用Virtual Earth地图服务
ilverlight应用中使用地图服务是否能够得心应手呢? 答案是肯定的,我们操作Earth服务只需执行简单的服务调用,就可完成坐地日行八万里的壮举了,而这一切是由VIEWs组件封装了Javascript脚本来完成的,通过对Virtual Eart…...
打破系统壁垒:从 Android 到 macOS,打造全平台统一终端管理(MDM)方案
目录 什么是统一设备管理? 一、引言 二、为什么跨平台设备管理至关重要 三、统一设备管理平台的核心功能 3.1 多平台生态整合 3.2 全设备生命周期管理 3.3 统一策略配置 3.4 广泛的行业适用性 四、实施统一设备管理的优势 五、企业设备管理的未来趋势 六…...
PP-DocLayoutV3实操手册:display_formula公式块检测准确率提升的3个微调技巧
PP-DocLayoutV3实操手册:display_formula公式块检测准确率提升的3个微调技巧 1. 引言:为什么公式检测这么重要? 在文档数字化处理过程中,数学公式的准确检测一直是个技术难点。传统的OCR系统往往把公式误判为普通文本或图像&…...
pandas API on Spark 与 pandas / PySpark 互转指南
1. 为什么会有互转需求 pandas API on Spark 的定位很特殊:它既想保留 pandas 的使用体验,又建立在 Spark 的分布式执行之上。因此开发时常见的场景有三种: 已经有 pandas 代码,想迁移到分布式环境已经在用 PySpark DataFrame&…...
实战应用:基于快马AI与OpenClaw构建Mac本地电商价格监控系统
最近在做一个电商价格监控的小工具,发现用OpenClaw配合Mac本地环境搭建特别方便。这里分享一下我的实战经验,希望能帮到有类似需求的同学。 为什么选择OpenClaw OpenClaw是个轻量级的Python爬虫框架,特别适合需要快速搭建数据采集系统的场景…...
从零开始:在Unity中完美实现视频播放功能的完整指南(附常见报错解决方案)
从零开始:在Unity中完美实现视频播放功能的完整指南(附常见报错解决方案) 在游戏开发中,视频播放功能的应用场景越来越广泛——从开场动画、过场剧情到UI背景,视频元素能为玩家带来更丰富的视听体验。Unity作为主流的…...
Ostrakon-VL扫描终端部署:支持HTTPS与Basic Auth安全访问
Ostrakon-VL扫描终端部署:支持HTTPS与Basic Auth安全访问 1. 项目概述 Ostrakon-VL扫描终端是一款基于Ostrakon-VL-8B多模态大模型开发的Web交互应用,专为零售与餐饮行业场景优化设计。与传统工业级UI不同,该终端采用高饱和度的像素艺术风格…...
保姆级教程:在Windows系统本地部署Qwen3-14B-Int4-AWQ对话模型
保姆级教程:在Windows系统本地部署Qwen3-14B-Int4-AWQ对话模型 1. 前言:为什么选择本地部署? 在个人电脑上运行大语言模型听起来可能有些遥不可及,但随着模型量化技术的进步,现在即使是消费级显卡也能流畅运行14B参数…...
基于SpringBoot的CLAP音频分类服务开发实战
基于SpringBoot的CLAP音频分类服务开发实战 1. 项目背景与价值 音频分类在实际业务中有着广泛的应用场景,比如内容审核、智能家居、媒体分析等。传统的音频分类方案通常需要大量标注数据来训练专用模型,这在很多实际场景中成本高昂且不够灵活。 CLAP&…...

