堆排序(Heap Sort)是一种效率较高的排序算法,它是利用堆这种数据结构而设计的。堆(Heap)是一个完全二叉树,它分为两种类型:最大堆和最小堆。最大堆的每个节点的值都大于或等于其左右子节点的值,最小堆的每个节点的值都小于或等于其左右子节点的值。堆排序是利用堆这种数据结构而设计的一种排序算法,它的平均时间复杂度为 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)

该算法首先构造一个最大堆,然后进行排序。在构造最大堆时,从最后一个非叶子节点开始向上堆化,直到堆化根节点。在排序时,每次将堆顶元素与最后一个元素交换,并将堆的大小减 1,再从堆顶开始向下堆化,直到堆化大小为 1

算法实现堆排序

原文地址: https://www.cveoy.top/t/topic/fTo5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录