引言上篇博客讲到了堆是什么,以及堆的基本创建和实现,这次我们再来对堆这个数据结构更进一步的深入,将讲到的内容包括:向下调整建堆,建堆的复杂度计算,堆排序和topk问题。话不多说,开启我们今天的内容吧。堆排序在讲堆排序之前,我想讲讲建堆的问题。在上篇博客中,我们建堆的时候是存在一个数组(数组中存储着我们建堆所需要的元素),通过一个个取出数组中的元素并插入新的堆中达到建堆目的。这时我们可以想,如果需要直接在存储元素的数组上建堆,应该怎么处理呢?向上调整建堆如果你学会了向上调整,你应该不难想到可以这样写://这里是在原数组的基础上建立大堆voidSwap(int*x,int*y){ inttmp=*
💞💞前言hellohello~,这里是大耳朵土土垚~💖💖,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹💥个人主页:大耳朵土土垚的博客💥所属专栏:数据结构学习笔记、C语言系列函数实现💥对于数据结构顺序表、链表、堆有疑问的都可以在上面数据结构的专栏进行学习哦~有问题可以写在评论区或者私信我哦~🥳🥳前面我们学习了利用堆进行排序,今天我们将继续介绍利用堆解决前k个最值的问题,Topk问题(在N个数中找出最大的前k个)在实际生活中也非常常见,💥💥比如店外卖时评分最高的前十家店铺,玩王者时英雄战力前十名等与排序排名有关的应用。🥰🥰解题思路正常思路将这N个数建成一个大堆,然后Popk次,就可以找出最大的前k个;💫💫但
文章目录1.树的概念1.1树的相关概念1.2树的表示2.二叉树2.1概念2.2特殊二叉树2.3二叉树的存储3.堆3.1堆的插入(向上调整)3.2堆的删除(向下调整)3.3堆的创建3.3.1使用向上调整3.3.2使用向下调整3.3.3两种建堆方式的比较3.4堆排序3.5TopK问题1.树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。如下图:有一个特殊的结点,称为根结点,根节点没有前驱结点。例如A节点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每
🎥屿小夏:个人主页🔥个人专栏:剑指offer🌄莫道桑榆晚,为霞尚满天!文章目录📑前言🌤️什么是Top-k问题?🌤️常见的Top-K问题类型☁️寻找Top-K最大元素☁️寻找Top-K最小元素☁️寻找第K大的元素☁️寻找出现次数Top-K的元素🌤️解决Top-K问题的方法☁️排序☁️最小堆☁️快速选择☁️哈希表🌤️Topk的面试技巧🌤️全篇总结📑前言当你准备面试技术岗位时,经常会遇到一类问题,被称为Top-K问题。这些问题要求你找到数据集中的前K个最大或最小元素。这些问题出现在各种面试中,包括软件工程、数据科学和机器学习等领域。这篇博客将为你提供有关Top-K问题的全面指南,包括常见的问题类型、
W...Y的主页 😊代码仓库分享 💕目录堆排序 建堆 建堆的时间复杂度Topk问题学习了二叉树以及堆,今天我们来学习一下什么是堆排序以及经典二叉树问题——topk问题。在学习开始我们先来回顾一下上篇博客中我们提到的堆,在实现堆时我们要进行向上调整或向下调整来继续保存堆的特性。具体代码如下:向上调整函数:voidAdjustUp(HPDataType*a,intchild){ intparent=(child-1)/2; while(child>0) { if(a[child]向下调整函数:voidAdjustDown(HPDataType*a,intn,intparent){ intchi
🚩纸上得来终觉浅,绝知此事要躬行。🌟主页:June-Frost🚀专栏:数据结构🔥该文章分别探讨了向上建堆和向下建堆的复杂度和一些堆的经典应用-堆排列与topk问题。❗️该文章内的思想需要用到实现堆结构的一些思想(如向上调整和向下调整等),可以在另一篇文章《堆的顺序实现》中再次了解一下,其中一些接口有具体的实现💖。目录:🌍建堆🔭向下建堆✈️时间复杂度🔭向上建堆✈️时间复杂度🌎堆的经典应用🔭堆排序🔭TOPK问题❤️结语🌍建堆 建堆的常见方式有两种:向上建堆和向下建堆。🔭向下建堆 这些交换其实就是向下调整的过程,所以向下建堆只要通过不断的向下调整就可以实现。intarr[]={10,20,25,35
=========================================================================个人主页代码仓库C语言专栏初阶数据结构专栏Linux专栏 =========================================================================接上篇二叉树和堆的引入========================================================================= 目录前言建堆插入数据向上调整算法建堆移动数据向上调整算法建堆无序数组从H-1层
和光同尘_我的个人主页应该在肩膀上长着自己的脑袋。--弗拉基米尔.伊里奇.列宁二叉树、堆的概念及应用🕯️前言1.数的概念及结构1.1.树的概念1.2.树的相关概念1.3.数的表示2.二叉树概念及结构2.1.概念2.2.特殊二叉树2.3.二叉树的性质2.4.二叉树的存储结构2.4.1.顺序结构2.4.2.链式存储3.二叉树的顺序结构及实现3.1.二叉树的顺序结构3.2.堆的概念和结构3.3.堆的实现3.3.1.堆向下调整算法3.3.2.向下调整建堆3.3.3.向下建堆时间复杂度3.3.4.堆的插入(向上调整)3.3.5.堆的删除(向下调整)3.3.6.堆的代码实现3.3.6.1声明3.3.6.2
文章目录堆的概念性质图解向上调整算法算法分析代码整体实现向下调整算法算法分析整体代码实现堆的接口实现初始化堆销毁堆插入元素删除元素打印元素判断是否为空取首元素实现堆堆排序创建堆调整堆整合步骤TopK问题堆的概念堆就是将一组数据所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足树中每一个父亲节点都要大于其子节点称为大堆(树中每一个父亲节点都要大于其子节点称为小堆)。性质①对于大堆(大根堆)来说,堆的顶部也就是数组首元素一定是最大的元素②对于小堆(小根堆)来说,堆的顶部也就是数组首元素一定是最小的元素(这两点对于下面的堆排序来说十分重要)此外,堆总是一棵完全二叉树,因为堆本身就是二叉树
👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》🌝每一个不曾起舞的日子,都是对生命的辜负目录前言 1.堆的概念和结构2.堆的实现2.1向上调整算法2.2向下调整算法2.3堆的创建2.4建堆时间复杂度2.5堆的插入2.6堆的删除2.7堆的代码实现3.堆的应用3.1堆排序3.2TopK问题前言本篇文章博主主要围绕堆这一数据结构展开,内容包括两种建堆方式,两种建堆方式的时间复杂度分析,最后引入堆的应用:堆排序和TopK问题,希望大家多多点赞收藏支持🔥欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。==========