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); } }