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

六 考点追踪

暂 无

相关推荐
罗超驿3 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
努力也学不会java4 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
菜菜小狗的学习笔记6 小时前
剑指Offer算法题(四)链表
数据结构·算法·链表
We་ct6 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法
咱就是说不配啊7 小时前
3.19打卡day33
数据结构·c++·算法
重生之后端学习9 小时前
287. 寻找重复数
数据结构·算法·leetcode·深度优先·图论
一只小灿灿10 小时前
六大主流编程语言数据类型底层深度解析:从硬件寄存器到内存布局、编译运行与跨平台本质(超全底层版)
数据结构
今儿敲了吗10 小时前
46| FBI树
数据结构·c++·笔记·学习·算法
Z9fish11 小时前
sse哈工大C语言编程练习47
c语言·数据结构·算法
愣头不青11 小时前
560.和为k的子数组
java·数据结构