数据结构与算法-关于堆的基本排序介绍
创作时间:
作者:
@小白创作中心
数据结构与算法-关于堆的基本排序介绍
引用
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)。
六、总结
堆排序是一种高效且稳定的排序算法,它利用堆这种数据结构的特性来进行排序。在实际编程中,堆排序因其稳定的排序特性以及较好的时间复杂度,常常被用作排序算法的标准实现之一。在需要对大量数据进行排序时,堆排序是一个非常好的选择。
本文原文来自腾讯云开发者社区
热门推荐
斗罗大陆诛邪传说角色介绍:六大主角技能特点全解析
泰国公立大学、皇家类大学和私立大学的区别
Excel中计算曲线下的面积:三种实用方法详解
两只羊有什么寓意:在文化和象征中的意义解析
哲学思考:可以没信仰,不可无信念
剪刀石头布:游戏背后的文化、心理与教育价值探讨
图书馆阅览室效果图设计——打造静谧与智慧的阅读空间
吉他效果器音色调校指南:从基础模块到高级应用
原批是什么意思?
神仙鱼的养殖方法和注意事项
怎样查询商标是否已经被注册
大量个人信息数据遭境外访问窃取,上海某医疗科技企业被行政处罚
用什么方法可以了解公务员行业的薪资待遇趋势?
家庭用车选购指南:轿车、SUV、MPV优缺点全解析
如何让心爱的人也爱上你:真诚沟通与信任的建立之道
管理自己,要懂五行「生克」与「反克」!

惠普笔记本自带软件详解及优化技巧,提升电脑性能与体验
“中国好人”张杰:“每件平凡小事,都是重要的事”
案例学习 | 痛风性关节炎
砂糖橘价格飙升三成!电白种植户笑了
不敢体检害怕查出大病怎么办
二手房的契税与首套房的契税有何不同?
赋能未来:国际部小学STEAM科学实践活动
Word中快速找出重复内容的多种方法
孕期的13项经典常见症状与应对策略,让孕妈咪顺利诞生小宝宝!
开学第一课,清远交警走进校园敲响交通安全“上课铃”!
氨基酸反应合成车间的消毒实践:从清洁剂选择到消毒效果验证的全面指南!
节气养生|立春万物生,化湿除春困
如何建立家族投资基金以实现财富传承
您不可不知水晶原来是要许愿!如何开启水晶能量?让水晶实现您的愿望