defbuildMaxHeap(arr): import math for i inrange(math.floor(len(arr)/2),-1,-1): heapify(arr,i)
defheapify(arr, i): left = 2*i+1 right = 2*i+2 largest = i if left < arrLen and arr[left] > arr[largest]: largest = left if right < arrLen and arr[right] > arr[largest]: largest = right
if largest != i: swap(arr, i, largest) heapify(arr, largest)
defswap(arr, i, j): arr[i], arr[j] = arr[j], arr[i]
defheapSort(arr): global arrLen arrLen = len(arr) buildMaxHeap(arr) for i inrange(len(arr)-1,0,-1): swap(arr,0,i) arrLen -=1 heapify(arr, 0) return arr
funcbuildMaxHeap(arr []int, arrLen int) { for i := arrLen / 2; i >= 0; i-- { heapify(arr, i, arrLen) } }
funcheapify(arr []int, i, arrLen int) { left := 2*i + 1 right := 2*i + 2 largest := i if left < arrLen && arr[left] > arr[largest] { largest = left } if right < arrLen && arr[right] > arr[largest] { largest = right } if largest != i { swap(arr, i, largest) heapify(arr, largest, arrLen) } }