📅  最后修改于: 2023-12-03 15:23:41.209000             🧑  作者: Mango
堆排序(Heap Sort)是一种基于比较的排序算法,它的时间复杂度为 O(n log n)。堆排序首先将待排序序列构建成一个堆,然后进行排序,这里的排序指的是将堆顶元素与堆末尾元素交换,然后让堆尺寸减 1 并继续维护堆结构,直到堆尺寸为 1。
def heapify(lst, n, i):
largest = i # 最大值节点
l = 2 * i + 1 # 左节点
r = 2 * i + 2 # 右节点
# 判断左节点是否大于根节点
if l < n and lst[i] < lst[l]:
largest = l
# 判断右节点是否大于根节点
if r < n and lst[largest] < lst[r]:
largest = r
# 如果最大值节点不是根节点,则交换根节点和最大值节点
if largest != i:
lst[i], lst[largest] = lst[largest], lst[i]
# 继续递归处理最大值节点
heapify(lst, n, largest)
def heap_sort(lst):
n = len(lst)
# 构建一个大根堆
for i in range(n // 2 - 1, -1, -1):
heapify(lst, n, i)
# 一个一个交换堆顶元素与堆末尾元素并重建堆
for i in range(n - 1, 0, -1):
lst[0], lst[i] = lst[i], lst[0]
heapify(lst, i, 0)
return lst
lst = [4, 10, 3, 5, 1, 6, 2, 8, 7, 9]
sorted_lst = heap_sort(lst)
print(sorted_lst)
输出结果为:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]