堆排序算法-python3实现
# 堆化函数-将最大值升到root,即数组最前面的位置,同时在此过程中尽量把大的值向“上”移
# arr-待堆化的数组,n-数组长度,i-堆中当前待比较值的下标
def heapify(arr, n, i):
largest = i
left = 2*i + 1
right = 2*i + 2
if left < n and arr[largest] < arr[left]:
largest = left
if right < n and arr[largest] < arr[right]:
largest = right
if largest != i:
arr[largest], arr[i] = arr[i], arr[largest]
heapify(arr, n, largest)
# 堆排序
def heap_sort(arr):
n = len(arr)
# 构造大顶堆maxheap
for i in range(n, -1, -1):
heapify(arr, n, i)
# 将当前最大值交换到arr末尾
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
参考:菜鸟教程堆排序