Python 算法教程(7):堆排序详解

前言

堆排序利用堆这种数据结构,时间复杂度 O(n log n)。

一、算法原理

1.建堆 2.交换堆顶与末尾 3.调整堆 4.重复

二、代码实现

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)
    return arr

def heapify(arr, n, i):
    largest = i
    l = 2 * i + 1
    r = 2 * i + 2
    if l < n and arr[l] > arr[largest]:
        largest = l
    if r < n and arr[r] > arr[largest]:
        largest = r
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]
        heapify(arr, n, largest)

三、复杂度

时间 O(n log n),空间 O(1),不稳定

四、应用

TopK 问题、优先队列

总结

堆排序性能稳定,适合 TopK 问题。

下一篇:二分查找

发表回复

后才能评论