- 堆排序(Heap Sort)是一种基于二叉堆(Binary Heap)的排序算法,它的思想如下:
- 构建一个二叉堆:将待排序的数组看作一个二叉树,并将其调整为一个最大堆(Max Heap)或最小堆(Min Heap)。最大堆是指根节点大于或等于左右子节点的二叉堆,最小堆则相反,指根节点小于或等于左右子节点的二叉堆。
- 将堆顶元素与最后一个元素交换:将堆顶元素(即最大或最小元素)与未排序部分的最后一个元素交换位置。
- 调整堆:将堆顶元素与未排序部分的最后一个元素交换后,需要重新调整堆,使得堆满足最大堆或最小堆的性质。
- 重复步骤2和3:重复执行步骤2和3,直到整个数组都被排序。
- 在堆排序中,构建堆的时间复杂度为O(n),交换堆顶元素和调整堆的时间复杂度为O(log n),因此堆排序的总时间复杂度为O(n logn)。由于堆排序的时间复杂度较低,且不需要额外的空间,因此在实际应用中被广泛使用。
以下是一个用Python实现的堆排序测试程序:
def heapify(arr, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and arr[