#__author__=lx
#__date__=2011-09-29
#__brief__=Heap_sort
def left( i ):
return 2*i
def right( i ):
return 2*i + 1
def swap( a1, a2 ):
return a2, a1
def max_heap( A, i ):
if i == 0:
return
l = left( i )
r = right( i )
largest = i
if l < len( A ):
if A[ l ] > A[ i ] :
largest = l
else:
largest = i
if r < len( A ):
if A[ r ] > A[ largest ]:
largest = r
if largest != i:
A[i], A[largest] = swap( A[i], A[largest] )
max_heap( A, largest )
return A
def build_max_heap( A ):
i = len( A ) / 2
while ( i >= 1 ):
max_heap( A, i )
i -= 1
def heap_sort( A ):
build_max_heap( A )
i = len( A ) - 1
while ( i >= 2 ):
A[1], A[i] = swap( A[1], A[i] )
print A[-1]
A = max_heap( A[ :-1 ], 1 )
i -= 1
print A[-1]
if __name__ == "__main__":
d = [ 0, 4, 1, 3, 2, 16, 9, 10, 14, 8, 7 ]
heap_sort( d )