📅  最后修改于: 2023-12-03 15:27:09.577000             🧑  作者: Mango
堆排序是一种排序算法,它利用堆数据结构来实现排序。堆排序的时间复杂度为O(nlogn),比较适合大型数据集合的排序。
堆是一种基于完全二叉树的数据结构,它有两种类型:最大堆和最小堆。
堆的基本操作包括插入新值、删除最大/最小值、查找最大/最小值。
堆排序算法的基本思路是:
Python代码实现:
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)
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)
堆排序算法的时间复杂度为O(nlogn),与归并排序算法相比性能稍差,但比较适合大型数据集合的排序。因为堆排序算法的操作主要是通过交换堆顶和堆尾元素来实现的,所以其空间复杂度为O(1)。