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

C语言实现小根堆

迭代式建堆

#include<stdio.h>voidswap(int*a,int*b){inttemp=*a;*a=*b;*b=temp;}voiddown(int*nums,intsize,inti){for(intk=2*i+1;k<size;k=2*k+1){/* 父节点 (k - 1) / 2,左子节点 k,右子节点 k + 1 */printf_s("*************************************************************\r\n");printf_s("父节点i = %d, 左子节点k = %d, 右子节点k + 1 = %d\r\n",i,k,k+1);// 取左右子节点中较小的那一个if(k+1<size&&nums[k]>nums[k+1]){printf_s("nums[%d] > nums[%d] %d > %d k++\r\n",k,k+1,nums[k],nums[k+1]);k++;}if(nums[k]>nums[(k-1)/2]){printf_s("nums[%d] > nums[%d] %d > %d break\r\n",k,(k-1)/2,nums[k],nums[(k-1)/2]);printf_s("*************************************************************\r\n");break;}printf_s("nums[%d] < nums[%d] %d < %d swap\r\n",k,(k-1)/2,nums[k],nums[(k-1)/2]);swap(&nums[k],&nums[(k-1)/2]);for(intj=0;j<size;j++){printf("%d ",nums[j]);}printf_s("\r\n");for(intj=0;j<size;j++){printf("%d ",j);}printf_s("\r\n*************************************************************\r\n");}}voidInit(int*nums,intsize){for(inti=size/2-1;i>=0;i--){down(nums,size,i);}}intPop(int*nums,intsize){swap(&nums[0],&nums[size-1]);down(nums,size-1,0);returnnums[size-1];}voidPush(int*nums,intsize,intx){nums[size]=x;// 子节点小于父节点的值,交换值for(inti=size;i>=0&&nums[(i-1)/2]>nums[i];i=(i-1)/2){swap(&nums[(i-1)/2],&nums[i]);}}voiditerator(int*nums,intsize){for(inti=0;i<size;i++){printf("%d ",nums[i]);}printf("\n");}intmain(){intarr[]={9,8,7,6,5,4,3,2,1};intn=sizeof(arr)/sizeof(arr[0]);Init(arr,n);printf("Min Heap:\n");iterator(arr,n);Push(arr,n-1,0);iterator(arr,n);Pop(arr,n);iterator(arr,n);return0;}

运行结果


大根堆中的比较逻辑:如果父节点小于较大的子节点,交换两个节点
小根堆中的比较逻辑:如果父节点大于较小的子节点,交换两个节点
这是废话^~^

外部参考

C 语言实现海量数据 TopK 问题:小顶堆实战详解
C语言实现大根堆

http://www.cnnetsun.cn/news/3267113.html

相关文章:

  • Camunda Modeler:为什么它能成为业务流程建模的首选工具?
  • 终极方案:轻松解锁网易云音乐的神奇桌面工具
  • 揭秘Thymeleaf Layout Dialect工作原理:从源码角度理解模板装饰机制
  • 2026年答辩PPT制作保姆级教程:PaperRed 10分钟生成让导师眼前一亮的演示文稿
  • cache2k性能调优:7个技巧让你的应用快如闪电
  • 【硬核推荐】掌桥科研AI研究报告:人工+AI协同写作,把控报告质量
  • 泰克MSO54示波器常见故障与日常保养北光恒电指南
  • Phoenix.PubSub完全指南:构建分布式实时通信的终极解决方案
  • Homie Meta Extension实战:为物联网设备添加元数据与标签的完整指南
  • 3分钟快速上手:YaeAchievement原神成就一键导出终极指南
  • 如何用Yamale快速构建安全可靠的YAML验证系统
  • ROFL-Player:如何解决英雄联盟回放文件的版本兼容性难题?
  • GreenStash项目路线图:未来功能规划与社区发展展望
  • 如何用 Hermit 管理 Go、Node.js、Python 等多语言工具链
  • 收藏!小白程序员快速掌握大模型RAG:从入门到生产实战全解析
  • UnityPack工具链详解:unityextract和unity2yaml的完整使用手册
  • 【Springboot毕设全套源码+文档】基于SpringBoot的高校综合医疗健康服务管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • The Deck核心技术揭秘:Flutter + Redux构建跨平台游戏引擎
  • Agent开发需要懂大模型原理吗?门槛多高?——深度解析企业级智能体的技术壁垒与落地门槛
  • OS67调试技巧:如何快速定位和修复内核崩溃问题
  • 打造OS67命令行工具:实现自己的ls、cat和shell
  • ArkTS插件性能优化:如何配置Naily‘s ArkTS Support以获得最佳体验
  • 零碳园区数据应用的具体场景有哪些?
  • Lattice安全配置:容器集群访问控制与权限管理终极指南
  • Go终端表格神器uitable:5分钟快速上手创建美观数据展示
  • 10个你不知道的PHP Collection隐藏功能,提升开发效率
  • 如何3分钟快速实现Figma中文汉化?设计师必备效率工具终极指南
  • 四层板电源阻抗、地弹噪声与去耦网络避坑指南
  • AI资金流因子解析:近400亿美元押注美元多头,全球资金为何重新配置美元资产—AI宏观预测模型
  • 鼎业电气智能焊接节气装置如何采集压力、流量和用气时长数据?从传感器检测、数据换算到云端分析的完整流程!