堆排序是一种基于二叉堆的比较排序算法,先构建最大堆再逐个将堆顶最大值与末尾元素交换并调整堆,最终实现升序排列。

堆排序是一种基于比较的排序算法,它利用了二叉堆这种数据结构来实现。二叉堆本质上是一个完全二叉树,并且满足堆的性质:父节点的值总是大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。
堆排序的基本原理
堆排序主要分为两个阶段:
- 建堆:将无序数组构造成一个最大堆(升序排序时)或最小堆(降序排序时)。最大堆的根节点是当前堆中最大的元素。
- 排序:反复将堆顶元素(最大值)与堆的最后一个元素交换,然后减少堆的大小,并对新的堆顶进行调整,使其重新满足堆的性质。
这个过程持续进行,直到整个数组有序。
关键操作:堆化(heapify)
堆排序的核心是heapify函数,它的作用是让某个子树满足堆的性质。通常从最后一个非叶子节点开始,自底向上进行堆化,构建初始堆。
立即学习“Python免费学习笔记(深入)”;
大高朋团购系统是一套Groupon模式的开源团购程序,开发的一套网团购程序,系统采用ASP+ACCESS开发的团购程序,安装超简,功能超全面,在保留大高朋团购系统版权的前提下,允许所有用户免费使用。大高朋团购系统内置多种主流在线支付接口,所有网银用户均可无障碍支付;短信发送团购券和实物团购快递发货等。 二、为什么选择大高朋团购程序系统? 1.功能强大、细节完善 除了拥有主流团购网站功能,更特别支
Python 实现示例
以下是一个用 Python 实现的堆排序代码:
def heapify(arr, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left zuojiankuohaophpcn n and arr[left] youjiankuohaophpcn arr[largest]:
largest = left
if right zuojiankuohaophpcn n and arr[right] youjiankuohaophpcn arr[largest]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)def heap_sort(arr):
n = len(arr)
# 构建最大堆
for i in range(n // 2 - 1, -1, -1):
heapify(arr, n, i)
# 逐个提取元素
for i in range(n - 1, 0, -1):
arr[0], arr[i] = arr[i], arr[0]
heapify(arr, i, 0)调用 heap_sort([64, 34, 25, 12, 22, 11, 90]) 后,数组会变为有序状态。
堆排序的特点
- 时间复杂度:O(n log n),无论最好、最坏、平均情况都一样。
- 空间复杂度:O(1),是原地排序算法。
- 不稳定:相同元素的相对位置可能改变。
基本上就这些。堆排序虽然不如快排常用,但在某些限制内存或要求最坏情况性能稳定的场景中很有用。理解它有助于掌握优先队列和堆结构的应用。










