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

绵阳哪个网站做外卖做的好公司建网站做app要多少钱

绵阳哪个网站做外卖做的好,公司建网站做app要多少钱,郑州网站建设廴汉狮网络,重庆百度优化堆是其中一种非常重要且实用的数据结构。堆可以用于实现优先队列#xff0c;进行堆排序#xff0c;以及解决各种与查找和排序相关的问题。本文将深入探讨两种常见的堆结构#xff1a;大顶堆和小顶堆#xff0c;并通过 C 语言展示如何实现和使用它们。 一、定义 堆是一种完…堆是其中一种非常重要且实用的数据结构。堆可以用于实现优先队列进行堆排序以及解决各种与查找和排序相关的问题。本文将深入探讨两种常见的堆结构大顶堆和小顶堆并通过 C 语言展示如何实现和使用它们。 一、定义 堆是一种完全二叉树。完全二叉树的定义所有节点从上往下从左往右的依次排列不能有空位置是为完全二叉树。 下面是完全二叉树和不完全二叉树的示意图 大顶堆 根节点堆顶元素是所有节点中的最大值父节点都大于左右子节点。大顶堆常用于实现优先队列且可用于构建堆排序算法。 小顶堆 小顶堆中的根节点是所有节点中的最小值父节点都小于左右子节点。小顶堆常用于问题如查找流中的前 K 个最小元素。 二、实现 通常用 数组 来实现具体方法就是将二叉树的结点按照 层级顺序 放入数组中 根结点在 位置1数组索引0处不存储数据它的子结点在位置2和3而子结点的子结点则分别在位置4,5,6和7以此类推 如果一个结点的位置为 k则它的父结点的位置为 k/2两个子结点的位置则分别为 2k 和 2k1 2.1 Insert 堆是用 数组 完成数据元素的存储的由于数组的底层是一串连续的内存地址所以要往堆中插入数据只能往数组中从索引0处开始依次往后存放数据但是堆中对元素的顺序是有要求的每一个结点的数据要 大于等于它的两个子结点的数据所以每次插入一个元素都会使得堆中的数据顺序变乱这个时候就需要通过一些方法让刚才插入的这个数据放入到合适的位置 所以如果往堆中新插入元素只需要不断的比较新结点 a[k] 和它的父结点 a[k/2] 的大小然后根据结果完成数据元素的交换就可以完成堆的有序调整。 2.1 delMax 由大顶堆的特性可以知道索引1处的元素也就是根结点就 是最大的元素把根结点的元素删除后需要有一个新的根结点出现这时可以 暂时把堆中最后一个元素放到索引1处充当根结点但是它有可能不满足堆的有序性需求这个时候就需要通过一些方法让这个新的根结点放入到合适的位置 所以当删除掉最大元素后只需要将最后一个元素放到索引1处并不断的拿着当前结点 a[k] 与它的子结点a[2k] 和 a[2k1] 中的较大者交换位置即可完成堆的有序调整。 三、堆排序 要求给你一个数组 {4,6,8,5,9} , 要求使用堆排序法将数组升序排序。 实现步骤 构造堆得到堆顶元素这个值就是最大值交换堆顶元素和数组中的最后一个元素此时所有元素中的最大元素已经放到合适的位置对堆进行调整重新让除了最后一个元素的剩余元素中的最大值放到堆顶重复2~4这个步骤直到堆中剩一个元素为止 3.1 堆构造过程 堆的构造最直观的想法就是另外再创建一个新数组然后从左往右遍历原数组每得到一个元素后添加 到新数组中并通过上浮对堆进行调整最后新的数组就是一个堆 上述的方式虽然很直观也很简单但是可以用更聪明一点的办法完成它 创建一个新数组把原数组0 ~ length-1的数据拷贝到新数组的 1 ~ length 处再从新数组 长度的一半 处开始往 1索引 处扫描从右往左然后对扫描到的每一个元素做下沉调整即可 为什么是新数组长度的一半 因为新数组是一个无序堆长度的一半之后的结点为叶子结点叶子结点不需要要下沉调整 1.假设给定无序序列结构如下 2.此时我们从最后一个非叶子结点开始叶结点自然不用调整第一个非叶子结点arr.length/2-15/2-11,也就是下面的6结点)从左至右从下至上进行调整。 3.找到第二个非叶节点4由于[4,9,8]中9元素最大4和9交换。 4.这时交换导致了子根[4,5,6]结构混乱继续调整[4,5,6]中6最大交换4和6。 3.2 堆排序过程 对构造好的堆只需要做 类似于堆的删除操作就可以完成排序 将堆顶元素和堆中最后一个元素交换位置通过对堆顶元素下沉调整堆把最大的元素放到堆顶 (此时最后一个元素不参与堆的调整因为最大的数据已经到了数组的最右边)重复1~2步骤直到堆中剩最后一个元素 1.将堆顶元素9和末尾元素4进行交换 2.重新调整结构使其继续满足堆定义 3.再将堆顶元素8与末尾元素5进行交换得到第二大元素8 4.后续过程继续进行调整交换如此反复进行最终使得整个序列有序 3.3 总结堆排序的基本思路 1).将无序序列构建成一个堆根据升序降序需求选择大顶堆或小顶堆 2).将堆顶元素与末尾元素交换将最大元素沉到数组末端 3).重新调整结构使其满足堆定义然后继续交换堆顶元素与当前末尾元素反复执行调整交换步骤 直到整个序列有序。 至于完整的代码实现和动画显示可以参考我的文章 - 排序算法基础
http://www.dnsts.com.cn/news/35123.html

相关文章:

  • 网站前端设计网站建设的目的只是开展网络营销
  • 公司网站制作投标中山网站建设托管
  • php网站开发怎么接私活seo有哪些经典的案例
  • 沛县网站图片版小说网站源码
  • 邹平做网站重庆市建设安全监督站的网站
  • 大型网站怎么做优化wordpress 主题 设计
  • 网站被k有什么表现室内设计软件手机版
  • 网站建设策划案模板中国建设银行客户端下载官方网站
  • 广州花都网站建设营销策划好的网站
  • 做棋牌网站小网站备案
  • 安庆信德建设咨询有限公司网站wordpress禁用自动更新
  • 中铁韩城建设公司网站cpa项目怎么做必须有网站么
  • 网站设计师工资怎样用微软雅黑做网站可以吗
  • 许昌专业做企业网站的深圳全网推广营销怎么做
  • 温泉酒店网站建设方案全网营销口碑整合营销
  • 网站页面布局的目的软件开发与网站开发
  • 国内做网站最好的公司wordpress分类栏目文章
  • 男性产品哪个网站可以做百度手机seo软件
  • 怎么取网页视频网站元素网站关键词排名快速提升
  • 可以做网站的公司房地产集团网站建设方案
  • 数据统计网站电商平台项目计划书
  • 克隆网站到wordpress修改wordpress图片模糊加载
  • 怎样做网络销售网站网站建设对于企业发展的优势
  • 全球网站域名后缀实名认证sdk
  • 做动画 的 网站有哪些软件深圳做网站多钱
  • 正品查询网站怎么做哪些网站可以找到做跨境电商的公司
  • 网站建设-设计acca少女sdanvi
  • 微商网站模板ui设计培训哪里好
  • 南昌模板建站公司购物网站哪里建最好
  • 淮海中路街道网站建设广州网站建设商