堆排序算法
以下是一个完整的 堆排序(Heap Sort) Python实现,包含详细中文注释,适用于升序排序(使用大顶堆):
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)
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
arr = [4, 10, 3, 5, 1]
sorted_arr = heap_sort(arr)
print(sorted_arr) # 输出: [1, 3, 4, 5, 10]

浙公网安备 33010602011771号