let length
const swap = (array, i, j) => {
const temp = array[i]
array[i] = array[j]
array[j] = temp
}
const heapify = (array, i) => {
let largest = i
const left = i * 2 + 1
const right = i * 2 + 2
if (left < length && array[left] > array[largest]) {
largest = left
}
if (right < length && array[right] > array[largest]) {
largest = right
}
if (largest !== i) {
swap(array, largest, i)
heapify(array, largest)
}
}
const buildMaxHeap = array => {
length = array.length
for (let i = Math.floor(length / 2); i >= 0; i--) {
heapify(array, i)
}
}
const heapSort = array => {
buildMaxHeap(array)
for (let i = length - 1; i > 0; i--) {
swap(array, i, 0)
length--
heapify(array, 0)
}
return array
}
console.log(heapSort([3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]))
console