Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Heap Sort Algorithm in DSA Javascript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Heap Sort Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Heap Sort on a small array
What is the output of the following JavaScript code that uses heap sort to sort an array?
DSA Javascript
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) {
    [arr[i], arr[largest]] = [arr[largest], arr[i]];
    heapify(arr, n, largest);
  }
}

function heapSort(arr) {
  let n = arr.length;

  for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
    heapify(arr, n, i);
  }

  for (let i = n - 1; i > 0; i--) {
    [arr[0], arr[i]] = [arr[i], arr[0]];
    heapify(arr, i, 0);
  }
}

let array = [4, 10, 3, 5, 1];
heapSort(array);
console.log(array.join(' -> ') + ' -> null');
A1 -> 4 -> 3 -> 5 -> 10 -> null
B10 -> 5 -> 4 -> 3 -> 1 -> null
C1 -> 3 -> 4 -> 5 -> 10 -> null
D5 -> 10 -> 4 -> 3 -> 1 -> null
Attempts:
2 left
💡 Hint
Heap sort sorts the array in ascending order by building a max heap first.
🧠 Conceptual
intermediate
1:30remaining
Understanding heapify in heap sort
In the heap sort algorithm, what is the main purpose of the heapify function?
ATo build a max heap by ensuring the subtree rooted at a given index satisfies the heap property
BTo swap the first and last elements of the array
CTo sort the array by comparing adjacent elements
DTo reverse the array after sorting
Attempts:
2 left
💡 Hint
Heapify fixes the heap property starting from a node downwards.
🔧 Debug
advanced
2:00remaining
Identify the error in this heap sort code snippet
What error will this JavaScript code produce when running heap sort?
DSA Javascript
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) {
    [arr[i], arr[largest]] = [arr[largest], arr[i]];
    heapify(arr, n, largest);
  }
}

function heapSort(arr) {
  let n = arr.length;

  for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
    heapify(arr, n, i);
  }

  for (let i = n - 1; i > 0; i--) {
    [arr[0], arr[i]] = [arr[i], arr[0]];
    heapify(arr, i, 0);
  }
}

let array = [4, 10, 3, 5, 1];
heapSort(array);
console.log(array.join(' -> ') + ' -> null');
AThe array will be sorted in descending order instead of ascending
BSyntaxError due to incorrect swap syntax
CThe array will remain unsorted
DTypeError because heapify is called with wrong arguments
Attempts:
2 left
💡 Hint
Check the comparison operators in heapify function.
❓ Predict Output
advanced
2:00remaining
Heap sort output with duplicate elements
What is the output of the following heap sort code when sorting an array with duplicates?
DSA Javascript
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) {
    [arr[i], arr[largest]] = [arr[largest], arr[i]];
    heapify(arr, n, largest);
  }
}

function heapSort(arr) {
  let n = arr.length;

  for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
    heapify(arr, n, i);
  }

  for (let i = n - 1; i > 0; i--) {
    [arr[0], arr[i]] = [arr[i], arr[0]];
    heapify(arr, i, 0);
  }
}

let array = [4, 10, 3, 10, 5, 1];
heapSort(array);
console.log(array.join(' -> ') + ' -> null');
A10 -> 10 -> 5 -> 4 -> 3 -> 1 -> null
B1 -> 3 -> 4 -> 5 -> 10 -> 10 -> null
C1 -> 3 -> 4 -> 10 -> 5 -> 10 -> null
D1 -> 4 -> 3 -> 5 -> 10 -> 10 -> null
Attempts:
2 left
💡 Hint
Heap sort handles duplicates by sorting them in ascending order.
🚀 Application
expert
1:30remaining
Heap sort time complexity analysis
What is the time complexity of heap sort in the worst case and why?
AO(n^2) because heapify is called n times and each call takes O(n)
BO(n) because the array is sorted in a single pass
CO(log n) because heapify is a logarithmic operation
DO(n log n) because building the heap takes O(n) and each of the n removals takes O(log n)
Attempts:
2 left
💡 Hint
Consider the cost of building the heap and the cost of extracting elements.

Practice

(1/5)
1. What is the main purpose of the heap in the Heap Sort algorithm?
easy
A. To reverse the array elements
B. To store elements in sorted order permanently
C. To count the number of elements in the array
D. To efficiently find and remove the largest (or smallest) element

Solution

  1. Step 1: Understand heap property

    A heap is a special tree-based structure that allows quick access to the largest (max-heap) or smallest (min-heap) element.
  2. Step 2: Role in Heap Sort

    Heap Sort uses the heap to repeatedly extract the largest element and place it at the end, sorting the array.
  3. Final Answer:

    To efficiently find and remove the largest (or smallest) element -> Option D
  4. Quick Check:

    Heap = fast max/min access [OK]
Hint: Heap helps quickly get max or min element [OK]
Common Mistakes:
  • Thinking heap stores sorted elements permanently
  • Confusing heap with simple array storage
  • Assuming heap reverses the array
2. Which of the following is the correct way to swap two elements arr[i] and arr[j] in JavaScript during Heap Sort?
easy
A. let temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
B. arr[i], arr[j] = arr[j], arr[i];
C. swap(arr[i], arr[j]);
D. arr[i] = arr[j]; arr[j] = arr[i];

Solution

  1. Step 1: Understand JavaScript swap syntax

    JavaScript does not support tuple unpacking like Python, so swapping requires a temporary variable.
  2. Step 2: Check each option

    let temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; uses a temporary variable correctly. arr[i], arr[j] = arr[j], arr[i]; is Python syntax, swap(arr[i], arr[j]); is undefined function, arr[i] = arr[j]; arr[j] = arr[i]; overwrites values incorrectly.
  3. Final Answer:

    let temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; -> Option A
  4. Quick Check:

    Use temp variable to swap [OK]
Hint: Use temp variable to swap in JS [OK]
Common Mistakes:
  • Using Python-style tuple swap in JS
  • Calling undefined swap function
  • Overwriting values without temp variable
3. What will be the output array after applying Heap Sort on [4, 10, 3, 5, 1]?
medium
A. [1, 3, 4, 5, 10]
B. [10, 5, 4, 3, 1]
C. [1, 4, 3, 5, 10]
D. [5, 10, 4, 3, 1]

Solution

  1. Step 1: Understand Heap Sort output

    Heap Sort sorts the array in ascending order by default.
  2. Step 2: Sort the array

    Sorting [4, 10, 3, 5, 1] gives [1, 3, 4, 5, 10].
  3. Final Answer:

    [1, 3, 4, 5, 10] -> Option A
  4. Quick Check:

    Sorted ascending = [1, 3, 4, 5, 10] [OK]
Hint: Heap Sort outputs sorted ascending array [OK]
Common Mistakes:
  • Confusing heap structure with final sorted array
  • Thinking output is descending by default
  • Mixing up original and sorted arrays
4. Identify the error in this Heap Sort snippet:
function heapSort(arr) {
  let n = arr.length;
  for (let i = Math.floor(n / 2); i >= 0; i--) {
    heapify(arr, n, i);
  }
  for (let i = n - 1; i > 0; i--) {
    let temp = arr[0];
    arr[0] = arr[i];
    arr[i] = temp;
    heapify(arr, i, 0);
  }
}
medium
A. Swapping elements is done incorrectly
B. The first for loop should start from Math.floor(n / 2) - 1
C. The second for loop should start from i = 0
D. heapify function is called with wrong parameters

Solution

  1. Step 1: Check heap building loop

    The first loop builds the heap and should start from the last non-leaf node at index Math.floor(n / 2) - 1, not Math.floor(n / 2).
  2. Step 2: Verify other parts

    The second loop and swapping are correct. heapify parameters are also correct.
  3. Final Answer:

    The first for loop should start from Math.floor(n / 2) - 1 -> Option B
  4. Quick Check:

    Heap build starts at last non-leaf node [OK]
Hint: Heap build starts at floor(n/2)-1 [OK]
Common Mistakes:
  • Starting heap build loop at wrong index
  • Incorrect swap logic
  • Wrong heapify parameters
5. Given an array [12, 11, 13, 5, 6, 7], how many times will the heapify function be called during the entire Heap Sort process?
hard
A. 6 times
B. 10 times
C. 13 times
D. 15 times

Solution

  1. Step 1: Count heapify calls during heap build

    Heap build calls heapify top-level from index floor(n/2)-1=2 down to 0 (3 top-level). For this array, heapify(6,0) recurses once to heapify(6,2), total 4 calls.
  2. Step 2: Count heapify calls during sorting

    After building heap, heapify called top-level 5 times (i=5 to 1). Tracing: i=5:2 calls, i=4:2, i=3:2, i=2:2, i=1:1, total 9 calls.
  3. Step 3: Total calls

    Total heapify calls = 4 (build) + 9 (sort) = 13.
  4. Final Answer:

    13 times -> Option C
  5. Quick Check:

    Heapify calls = build + sort + recursive calls = 13 [OK]
Hint: Count build + sort + recursive heapify calls =13 [OK]
Common Mistakes:
  • Counting only build or only sort calls
  • Ignoring recursive heapify calls
  • Assuming heapify called once per element
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard