姬宜欣 发表于 2025-6-4 16:54:12

大根堆和小根堆的介绍

堆(Heap)的基本概念

堆是一种完全二叉树(Complete Binary Tree),其性质使得堆可以高效地支持以下操作:

[*]插入(Insert):将一个新元素加入到堆中。
[*]删除最大/最小元素(Delete Max/Min):移除并返回堆中的最大(大根堆)或最小(小根堆)元素。
[*]获取最大/最小元素(Get Max/Min):返回堆中的最大(大根堆)或最小(小根堆)元素。
大根堆(Max-Heap)

特性:

[*]每个节点的值都大于或等于其子节点的值。
[*]根节点是堆中最大的元素。
插入操作:

[*]将新元素插入到树的最底层的最后位置(保持完全二叉树的性质)。
[*]进行“上浮”操作,将新元素逐步与其父节点交换,直到堆的性质恢复或到达根节点为止。
删除最大元素:

[*]移除根节点。
[*]将最后一个元素移动到根位置。
[*]进行“下沉”操作,将根节点逐步与其较大的子节点交换,直到堆的性质恢复或到达叶子节点为止。
小根堆(Min-Heap)

特性:

[*]每个节点的值都小于或等于其子节点的值。
[*]根节点是堆中最小的元素。
插入操作:

[*]将新元素插入到树的最底层的最后位置(保持完全二叉树的性质)。
[*]进行“上浮”操作,将新元素逐步与其父节点交换,直到堆的性质恢复或到达根节点为止。
删除最小元素:

[*]移除根节点。
[*]将最后一个元素移动到根位置。
[*]进行“下沉”操作,将根节点逐步与其较小的子节点交换,直到堆的性质恢复或到达叶子节点为止。
C++ 示例代码

以下是详细的 C++ 示例代码,展示如何实现大根堆和小根堆:
#include //在c++中,使用优先队列需要包含queue这个头文件#include #include // 大根堆(默认行为)void maxHeapExample() {    // 创建一个大根堆    std::priority_queue maxHeap;    // 插入元素    maxHeap.push(10);    maxHeap.push(20);    maxHeap.push(5);    maxHeap.push(15);    std::cout

忌才砟 发表于 2025-10-26 19:56:30

感谢分享,下载保存了,貌似很强大

崔竹 发表于 2025-10-30 00:46:40

过来提前占个楼

洪势 发表于 2025-12-1 10:44:42

喜欢鼓捣这些软件,现在用得少,谢谢分享!

申屠梓彤 发表于 2025-12-31 09:04:46

收藏一下   不知道什么时候能用到

损注 发表于 2026-1-10 09:48:35

感谢,下载保存了

杜优瑗 发表于 2026-1-14 10:59:41

分享、互助 让互联网精神温暖你我

能氐吨 发表于 2026-1-16 14:18:23

前排留名,哈哈哈

衣旱 发表于 2026-1-19 11:34:33

懂技术并乐意极积无私分享的人越来越少。珍惜

焦尔蕾 发表于 2026-1-21 11:31:48

东西不错很实用谢谢分享

恶凝毛 发表于 2026-1-22 09:44:02

感谢分享,学习下。

支智敏 发表于 2026-1-27 02:55:38

喜欢鼓捣这些软件,现在用得少,谢谢分享!

院儿饯 发表于 2026-1-29 02:04:31

yyds。多谢分享

毋献仪 发表于 2026-1-29 04:19:56

这个好,看起来很实用

揭荸 发表于 2026-1-29 06:24:34

感谢,下载保存了

康器 发表于 2026-2-4 04:27:26

过来提前占个楼

各卧唯 发表于 2026-2-7 03:00:40

用心讨论,共获提升!

摹熹 发表于 2026-2-7 23:25:13

前排留名,哈哈哈

兜蛇 发表于 2026-2-9 02:14:41

yyds。多谢分享

粉押淫 发表于 2026-2-9 21:08:23

感谢分享
页: [1] 2
查看完整版本: 大根堆和小根堆的介绍