使用Python实现堆排序算法
发布时间:2023-12-04 21:44:47
堆排序是一种基于二叉堆的排序算法,它利用了堆的特性,通过构建最大堆或最小堆来进行排序。在这个算法中,堆被构建并一次删除根节点,然后交换它与最后一个节点,对剩下的节点重新进行堆化操作,直到所有的节点都被排序。下面将详细介绍这个算法的实现过程,并给出一个使用例子。
堆排序的实现步骤如下:
1. 首先将待排序的序列构建成一个最大堆。最大堆的定义是,根节点的值大于等于它的子节点的值。
2. 将堆的根节点与最后一个节点交换位置,然后对剩下的节点重新进行堆化操作。
3. 重复步骤2,直到所有的节点都被排序。
下面是使用Python实现堆排序算法的示例代码:
def heapify(arr, n, i):
largest = i # 初始化最大值为根节点
left = 2 * i + 1 # 左子节点的索引
right = 2 * i + 2 # 右子节点的索引
# 找到左右子节点中值最大的节点
if left < n and arr[i] < arr[left]:
largest = left
if right < n and arr[largest] < arr[right]:
largest = right
# 如果最大值不是根节点,则交换位置并重建堆
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
def heapSort(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[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
# 使用例子
arr = [12, 11, 13, 5, 6, 7]
heapSort(arr)
print(arr)
在上述例子中,输入的待排序序列为[12, 11, 13, 5, 6, 7],经过堆排序后得到的排序结果为[5, 6, 7, 11, 12, 13]。
以上就是使用Python实现堆排序算法的过程,通过构建最大堆并不断将最大值移到末尾来完成排序。堆排序的时间复杂度是O(nlogn),空间复杂度是O(1)。它是一种高效的排序算法,尤其适用于对大数据集进行排序。
