"""调整节点,使得满足大顶堆"""
def Max_Heapify(heap,heapSize,root):
left = root*2+1
right = left+1
large = root
if left<heapSize and heap[left]<heap[large]:
large=left
if right<heapSize and heap[right]<heap[large]:
large=right
if large != root:
heap[root],heap[large]=heap[large],heap[root]
Max_Heapify(heap,heapSize,large)
"""由下至上建立大顶堆"""
def Build_Max_Heap(heap):
HeapSize = heap.__len__()
for i in xrange((HeapSize-2)/2,-1,-1):
Max_Heapify(heap,HeapSize,i)
def HeapSort(nums):
Build_Max_Heap(nums)
for i in xrange(nums.__len__()-1,-1,-1):
nums[0],nums[i]=nums[i],nums[0]
Max_Heapify(nums,i,0)