数据结构与算法:堆排序详解
创作时间:
作者:
@小白创作中心
数据结构与算法:堆排序详解
引用
1
来源
1.
https://cloud.tencent.com/developer/article/2443173
堆排序是一种基于比较的排序算法,利用堆这种数据结构的特性来进行排序。堆排序的时间复杂度为 O(n log n),并且是一种不稳定的排序算法。本文将深入探讨堆排序的基本原理、实现步骤,并通过具体的案例代码详细说明堆排序的每一个细节。
一、堆排序的基本概念
堆排序的基本概念包括:
- 堆:堆是一种特殊的完全二叉树,其中每个节点的值要么大于等于其子节点的值(最大堆),要么小于等于其子节点的值(最小堆)。
- 堆序性质:对于最大堆,每个节点的值都不小于其子节点的值;对于最小堆,每个节点的值都不大于其子节点的值。
- 完全二叉树:堆通常采用数组形式存储,以便于高效地访问父节点、子节点以及兄弟节点。
二、堆排序的步骤
堆排序的基本步骤如下:
- 构建最大堆:将数组构建成一个最大堆。
- 交换元素:将堆顶元素(最大值)与堆的最后一个元素交换。
- 重新调整堆:将剩余的元素重新调整为最大堆。
- 重复步骤2和3:重复此过程,直到堆的大小为1。
三、堆排序的实现
接下来,我们将通过一个示例来详细了解堆排序的实现步骤。
1. 示例数组
考虑一个整数数组
arr = [5, 2, 4, 6, 1, 3]
2. 构建最大堆
构建最大堆的过程包括:
- 初始化:将数组中的元素按顺序放入数组。
- 下沉调整:从最后一个非叶子节点开始,向下调整以保持堆序性质。
def heapify(arr, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
# 如果左孩子大于根
if left < n and arr[left] > arr[largest]:
largest = left
# 如果右孩子大于当前最大的
if right < n and arr[right] > arr[largest]:
largest = right
# 如果最大的不是根
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i] # 交换
heapify(arr, n, largest)
def build_max_heap(arr):
n = len(arr)
# 从最后一个非叶子节点开始
for i in range(n // 2 - 1, -1, -1):
heapify(arr, n, i)
# 示例数组
arr = [5, 2, 4, 6, 1, 3]
build_max_heap(arr)
print("Max Heap:", arr)
3. 堆排序
堆排序的过程包括:
- 交换根节点:将最大值(堆顶元素)与数组最后一个元素交换。
- 重新调整堆:调整剩余的元素构成新的最大堆。
- 重复步骤1和2:直到堆的大小为1。
def heap_sort(arr):
n = len(arr)
# 构建最大堆
build_max_heap(arr)
# 逐个取出元素
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i] # 交换
heapify(arr, i, 0)
# 示例数组
arr = [5, 2, 4, 6, 1, 3]
heap_sort(arr)
print("Sorted array:", arr)
四、堆排序的时间复杂度分析
- 最好情况:堆排序的时间复杂度为 O(n log n)。
- 最坏情况:堆排序的时间复杂度为 O(n log n)。
- 平均情况:堆排序的平均时间复杂度为 O(n log n)。
五、堆排序的空间复杂度分析
- 堆排序是原地排序算法,不需要额外的存储空间,因此其空间复杂度为 O(1)。
六、总结
堆排序是一种高效且稳定的排序算法,它利用堆这种数据结构的特性来进行排序。在实际编程中,堆排序因其稳定的排序特性以及较好的时间复杂度,常常被用作排序算法的标准实现之一。在需要对大量数据进行排序时,堆排序是一个非常好的选择。
本文原文来自腾讯云开发者社区
热门推荐
慕田峪长城缆车和索道有什么区别
八达岭长城南线和北线哪个好
《玫瑰的故事》和刘亦菲的另一面
张妙格《我期待的不是雪》上线,冬日恋歌获好评
《第九个寡妇》:深刻探讨女性命运与社会变迁的引人注目之作
国色芳华何惟芳被污蔑带有邪气
张妙格《我期待的不是雪》登抖音热榜,温暖治愈获听众共鸣
赴美留学必备:一文详解美国借记卡申请要点
打造完美年终总结PPT的五大技巧
触觉·嗅觉·味觉·本体感知:跨越感官多模态交互系列六(完结篇)
刷新认知!人类嗅觉能感知60毫秒气味差异
11种摄影技巧,让你拍出更有历史感的古迹照片
医学影像软件选购指南:功能、易用性、价格全方位考量
南开中学集团校资源如何选?
第31届上海影评人奖揭晓:《里斯本丸沉没》等入选年度十佳
延长营业时间、增加排片场次,9部电影定档春节你期待哪部?
2024中国电影票房榜揭晓:《热辣滚烫》夺冠,八部国产片进前十
南佛罗里达大学研究揭示:近半数职场人有暴躁行为,专家这样建议
单亲家庭如何避免培养暴躁孩子?
想强化认知,稳定情绪?试试重量训练
MEMS文献中如何提高传感器灵敏度?
自动控制:控制系统的灵敏度分析
王者荣耀李信攻略:顺风入侵牵制两人,逆风光信换C,暗信单带打41
王者荣耀S35赛季米莱狄攻略:31连招比13连招效果好,出装最好选凝冰之息
《王者荣耀》对抗路战士克制指南,挑选制胜英雄
梦境与现实的交织:<爱丽丝梦游仙境>的心理学解读
从3500万到6000万:2025年四部待播古装剧市场表现预测
2025年国产年代剧片单:十部新剧展现剧集多元化
2025剧集市场:古装转向细分,现实题材成新宠
周涛领衔2025山东春晚,语言类节目阵容强大