algorithmpool
Version:
A pool of algorithms and data-structures for geeks
37 lines (34 loc) • 1.01 kB
JavaScript
import {
defaultCompare,
swap
} from '../../utils/util';
const heapify = (array, index, heapSize, compareFn) => {
let largest = index;
const left = (2 * index) + 1;
const right = (2 * index) + 2;
if (left < heapSize && compareFn(array[left], array[index]) > 0) {
largest = left;
}
if (right < heapSize && compareFn(array[right], array[largest]) > 0) {
largest = right;
}
if (largest !== index) {
swap(array, index, largest);
heapify(array, largest, heapSize, compareFn);
}
}
const buildMaxHeap = (array, compareFn) => {
for (let i = Math.floor(array.length / 2); i >= 0; i -= 1) {
heapify(array, i, array.length, compareFn);
}
return array;
}
export const heapSort = (array, compareFn = defaultCompare) => {
let heapSize = array.length;
buildMaxHeap(array, compareFn);
while (heapSize > 1) {
swap(array, 0, --heapSize);
heapify(array, 0, heapSize, compareFn);
}
return array;
}