Heap Sort Visualization

Normal
Heap Node
Comparing
Swapping
Sorted
0
Comparisons
0
Swaps
0
ms
function heapSort(arr) {
    // Build max heap
    for (let i = Math.floor(arr.length / 2) - 1; i >= 0; i--) {
        heapify(arr, arr.length, i);
    }

    // Extract elements from heap one by one
    for (let i = arr.length - 1; i > 0; i--) {
        // Move current root to end
        swap(arr, 0, i);
        
        // Call max heapify on the reduced heap
        heapify(arr, i, 0);
    }
}

function heapify(arr, n, i) {
    let largest = i;
    let left = 2 * i + 1;
    let right = 2 * i + 2;

    if (left < n && arr[left] > arr[largest]) {
        largest = left;
    }

    if (right < n && arr[right] > arr[largest]) {
        largest = right;
    }

    if (largest !== i) {
        swap(arr, i, largest);
        heapify(arr, n, largest);
    }
}