def build_min_heap(arr):
for i in range(int(len(arr)/2),-1,-1):
min_heapify(arr,i)
def min_heapify(arr,i):
c1=2*i+1
c2=2*i+2
min=i
n=len(arr)
if c1<n and arr[c1]<arr[min]:
min=c1
if c2<n and arr[c2]<arr[min]:
min=c2
if min!=i:
swap(arr,i,min)
min_heapify(arr,min)
def build_max_heap(arr):
for i in range(int(len(arr)/2),-1,-1):
max_heapify(arr,i)
def swap(arr,i,j):
arr[i],arr[j]=arr[j],arr[i]
def max_heapify(arr,i):
c1=2*i+1
c2=2*i+2
n=len(arr)
max=i
if c1<n and arr[c1]>arr[max]:
max=c1
if c2<n and arr[c2]>arr[max]:
max=c2
if max!=i:
swap(arr,i,max)
max_heapify(arr,max)
def heap_sort(arr,k):
count = 0
for i in range(len(arr) - 1, 0, -1):
swap(arr, 0, i)
count += 1
if count == k:
print arr[-k]
break
if __name__=='__main__':
arr=[4,7,8,5,9,10,6,1]
z=sorted(arr)
build_max_heap(arr)
heap_sort(arr,5)