欢迎访问宙启技术站
智能推送

使用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)。它是一种高效的排序算法,尤其适用于对大数据集进行排序。