zoukankan      html  css  js  c++  java
  • 数据结构之堆的插入、取值、排序(细致讲解+图片演示)

    数据结构之堆(Heap):插入、取值、排序。

    堆是一种数据结构,分为最小堆和最大堆,可以用二叉树来表示。

    在二叉树的任意的一个三角结构中(一个父节点,两个子节点),需要满足以下两个条件:

    1、父节点要是最小的,就是最小堆(或最大的,就是最大堆),两个子节点之间没有要求

    2、数据插入的顺序是一层一层的,只有上一层存满,才会有下一层

     

    下面我们以图片的形式演示最小堆的插入、取值、和排序操作,只要知道最小堆的原理,那么最大堆也就明白了。

     

    假设我们有一个原始的最小堆如下:

     

    插入操作:

    当插入一个新值时,首先将值放到树的最后的位置,如下图所示。

    然后将这个值与父元素比较,如果不满足规则1,则与父元素替换(如下图所示)。

     第一步

    第二步

    第三步

    由图可知,在插入操作中,交换次数最大即为树的高度(log n

     

    最小值操作:

    在最小堆中,拿出一个最小值,当然就是拿出第一个数啦~不过拿完以后树不就没有“头”了?

    不用担心,我们可以把最后一个数放到头的位置,这样树的结构就不会改变,而且操作简单(因为是最后一个数)。

    当然,因为是最后一个数,必然会出现不满足条件1的情况,所以我们需要把新的树头与子元素比较替换,下面是图片演示:

    假设我们有一个原始的最小堆如下所示,接下来我们要取最小值:

     

    不过交换完很可能是不满足条件1的,那么我们就需要比较替换,替换规则是和两个子元素中最小的一个替换

    由图可知,在取值操作中,交换次数最大也为树的高度(log n

     

    堆的排序:

    我们知道了如何取最小值,那么堆的排序简单啦~只要依次取堆的最小值,那么当堆取完时,我们取出的数据不就是一个从小到大的序列嘛!

  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/chenkeyu/p/7505637.html
Copyright © 2011-2022 走看看