defheapify(arr,n,i):largest=i# Initialize largest as rootleft=2*i+1# left childright=2*i+2# right child# If left child is larger than rootifleft<nandarr[i]<arr[left]:largest=left# If right child is larger than rootifright<nandarr[largest]<arr[right]:largest=right# Change root if needediflargest!=i:arr[i],arr[largest]=arr[largest],arr[i]# Swapheapify(arr,n,largest)defheap_sort(arr):n=len(arr)# Build a maxheapforiinrange(n//2-1,-1,-1):heapify(arr,n,i)# Extract elements one by oneforiinrange(n-1,0,-1):arr[i],arr[0]=arr[0],arr[i]# Swapheapify(arr,i,0)# Example usagearr= [12, 11, 13, 5, 6, 7]
heap_sort(arr)print("Sortedarray:",arr)