MAX-HEAPIFY(A, i) l = LEFT(i) r = RIGHT(i) # 找到i,i的左子树的根结点,i的右子树的根结点中值最大的结点 if l <= A.heap-size and A[l] > A[i] largest = l else largest = i if r <= A.heap-size and A[r] > A[largest] largest = r
if largest != i exchange A[i] with A[largest] MAX-HEAPIFY(A, largest)
heap_size = 0 left = lambda i: 2*i+1 right = lambda i: 2*i+2
defHeapify(arr, i): l, r = left(i), right(i) largest = l if l < heap_size and arr[l] > arr[i] else i largest = r if r < heap_size and arr[r] > arr[largest] else largest if i != largest: arr[i], arr[largest] = arr[largest], arr[i] Heapify(arr,largest)
defBuildMaxHeap(arr): global heap_size heap_size = len(arr) for i in range(len(arr)//2-1,-1,-1): Heapify(arr,i)
defHeapSort(arr): global heap_size BuildMaxHeap(arr) for i in range(len(arr)-1,-1,-1): arr[i], arr[0] = arr[0], arr[i] heap_size -= 1 Heapify(arr,0) return arr
v1.5.2