408真题解析-2009-9-数据结构-小根堆-排序

说明:本文参考了启航25版本、竟成25版本、王道25版本、考研官方推荐教材、互联网资料以及结合个人的理解整理。本人水平有限,若有不对之处,烦请指正。

一 真题2009-9

  1. 已知关键字序列5,8,12,19,28,20,15,22 是小根堆(最小堆)插入关键字3,调整后得到的小根堆是()。

A. 3,5,12,8,28,20,15,22,19

B. 3,5,12,19,20,15,22,8,28

C. 3,8,12,5,20,15,22,28,19

D. 3,12,5,8,28,20,15,22,19

二 读题

本题考察小根堆的调整

三 哔哔详解

小根堆插入规则:首先新元素放入堆尾,然后不断向上调整(与父结点比较,若小于则交换,直至满足堆性质)。

第一步 确认原堆

复制代码
          5
       /     \
      8       12
    /  \     /  \
   19  28   20   15
  /
 22

第二步 插入关键字3

复制代码
          5
       /     \
      8       12
    /  \     /  \
   19  28   20   15
  / \
 22  3   ← 新插入的 3

第三步向上调整:

  • 当前节点:下标 8,值 = 3
  • 父节点(8 - 1) // 2 = 3,值 = 19
    → 3 < 19 → 交换

数组变为:[5, 8, 12, 3, 28, 20, 15, 22, 19]

树结构:

复制代码
          5
       /     \
      8       12
    /  \     /  \
   3   28   20   15
  / \
22  19
  • 当前节点:下标 3,值 = 3
  • 父节点(3 - 1) // 2 = 1,值 = 8
    → 3 < 8 → 交换

数组变为:[5, 3, 12, 8, 28, 20, 15, 22, 19]

树结构:

复制代码
          5
       /     \
      3       12
    /  \     /  \
   8   28   20   15
  / \
22  19
  • 当前节点:下标 1,值 = 3
  • 父节点(1 - 1) // 2 = 0,值 = 5
    → 3 < 5 → 交换

数组变为:[3, 5, 12, 8, 28, 20, 15, 22, 19]

树结构:

复制代码
          3        ← 根
       /     \
      5       12
    /  \     /  \
   8   28   20   15
  / \
22  19
  • 当前节点在根(下标 0),停止调整。

最终堆数组:3, 5, 12, 8, 28, 20, 15, 22, 19 故选 A

四 参考答案

参考答案 A

五 考点精析

5.1 堆的存储结构

  • 堆是完全二叉树 ,用一维数组按层序(level order)存储
  • 下标关系(从 0 开始):
    • 父节点:parent = (i - 1) // 2 (整数除法,向下取整)
    • 左孩子:left = 2i + 1
    • 右孩子:right = 2i + 2

5.2 插入操作的调整

  • 插入向上调整(sift-up)

  • 删除堆顶向下调整(sift-down)

  • 本题考的是插入 + 向上冒泡

5.3 小根堆性质

  • 任意节点 ≤ 其子节点
  • 不要求左右子树有序,只要求父子关系满足即可
  • 数组中不是排序数组 !例如 [3,5,12,8,...] 中 8 < 12,但 8 在左子树、12 在右子树,这是允许的。

六 考点追踪

暂 无

相关推荐
晊晌_h5 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦5 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
lisin-lee-cooper11 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
sunburn-11 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法
哭泣方源炼蛊12 小时前
并查集进阶 P1(带权并查集,并查集分类)
数据结构·c++·算法·二进制·带权并查集
五_谷_丰_登14 小时前
平衡二叉树(AVL)讲解二
数据结构·c++
fpcc15 小时前
数据结构和算法—最短路径的算法
数据结构·算法
Mr. zhihao16 小时前
从数组到 B+ 树:一棵树的进化史
数据结构·innodb·b+树
船厂电气自动化ai大模型16 小时前
AI大模型与数学第64课:矩阵×向量乘法(神经网络矩阵运算底层)
数据结构·深度学习·线性代数·机器学习·推荐算法
小欣加油17 小时前
Leetcode2058 找出临界点之间的最小和最大距离
数据结构·c++·算法·leetcode·职场和发展