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 在右子树,这是允许的。

六 考点追踪

暂 无

相关推荐
sa1002718 小时前
京东评论 API 实战:JSON 数据结构、字段含义与解析技巧
前端·数据结构·json
这料鬼有毒18 小时前
二刷hot100-17.电话号码的字母组合
数据结构
执明wa18 小时前
从 T 到协变逆变
java·开发语言·数据结构
夏日听雨眠18 小时前
排序(选择排序 ,冒泡排序,归并排序)
数据结构·算法·排序算法
tyung19 小时前
Go 手写二叉堆优先队列:避开 container/heap 的性能陷阱
数据结构·后端·go
papership19 小时前
【入门级-数据结构-1、线性结构:栈和队列】
数据结构
fu的博客19 小时前
【数据结构14】并查集:QuickUnion、QuickFind、路径压缩
数据结构
比特森林探险记19 小时前
底层数据结构分析 go 语言中的 slice map channel interface
数据结构·golang·哈希算法
我不是懒洋洋19 小时前
【C++】类和对象( 类的定义、实例化、 this指针、 C++和C语言实现Stack对比)
c语言·开发语言·数据结构·c++·经验分享·算法·visual studio
CryptoPP19 小时前
快速集成:基于现代API的金融数据流解决方案
大数据·数据结构·笔记·金融·区块链