📖 Scenario: You are working on a program that needs to sort a list of numbers efficiently. You decide to use the heap sort algorithm, which uses a special tree structure called a heap to sort numbers in ascending order.
🎯 Goal: Build a C# program that sorts an array of integers using the heap sort algorithm. You will create the array, set up helper variables, write the heapify logic, and finally print the sorted array.
📋 What You'll Learn
Create an integer array called numbers with the exact values: 12, 11, 13, 5, 6, 7
Create an integer variable called n to store the length of the array
Write a Heapify method that maintains the heap property for a subtree
Write the main heap sort logic using Heapify to sort the array
Print the sorted array elements separated by spaces
💡 Why This Matters
🌍 Real World
Heap sort is used in systems where guaranteed O(n log n) sorting time is needed, such as in embedded systems or real-time applications.
💼 Career
Understanding heap sort helps in technical interviews and improves knowledge of efficient sorting algorithms used in software development.
Progress0 / 4 steps
1
Create the array of numbers
Create an integer array called numbers with these exact values: 12, 11, 13, 5, 6, 7.
DSA C#
Hint
Use int[] numbers = { ... }; to create the array with the exact numbers.
2
Create a variable for the array length
Create an integer variable called n and set it to the length of the numbers array.
DSA C#
Hint
Use int n = numbers.Length; to get the array size.
3
Write the Heapify method
Write a method called Heapify that takes an integer array arr, an integer n for the heap size, and an integer i for the root index. The method should maintain the max heap property for the subtree rooted at i.
DSA C#
Hint
Use the standard heapify logic: compare root with left and right children, swap if needed, then call Heapify recursively.
4
Implement heap sort and print the sorted array
Write the heap sort logic using the Heapify method to sort the numbers array in ascending order. Then print the sorted array elements separated by spaces using Console.Write.
DSA C#
Hint
First build a max heap from the array. Then repeatedly swap the first element with the last unsorted element and heapify the reduced heap. Finally, print the sorted array.
Practice
(1/5)
1. What is the main purpose of the heapify function in the Heap Sort algorithm?
easy
A. To build a max heap from an unordered array
B. To swap the first and last elements of the array
C. To reverse the array after sorting
D. To count the number of elements in the array
Solution
Step 1: Understand heapify's role
The heapify function rearranges elements to satisfy the max heap property, where each parent node is greater than its children.
Step 2: Connect heapify to building max heap
Heapify is called repeatedly to build a max heap from an unordered array before sorting begins.
Final Answer:
To build a max heap from an unordered array -> Option A
Quick Check:
heapify builds max heap = A [OK]
Hint: Heapify creates max heap structure before sorting [OK]
Common Mistakes:
Confusing heapify with swapping elements
Thinking heapify reverses the array
Assuming heapify counts elements
2. Which of the following is the correct way to swap two elements arr[i] and arr[j] in C# during heap sort?
easy
A. swap(arr[i], arr[j]);
B. int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
C. arr[i], arr[j] = arr[j], arr[i];
D. arr[i] = arr[j]; arr[j] = arr[i];
Solution
Step 1: Identify correct C# swap syntax
In C#, swapping requires a temporary variable to hold one value during exchange.
Step 2: Check each option
int 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 invalid without a swap method. arr[i] = arr[j]; arr[j] = arr[i]; overwrites values incorrectly.
Final Answer:
int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; -> Option B
Quick Check:
Use temp variable to swap in C# = C [OK]
Hint: Use temp variable to swap in C# [OK]
Common Mistakes:
Using Python tuple swap syntax in C#
Calling undefined swap function
Overwriting values without temp variable
3. What will be the output array after applying heap sort on int[] arr = {4, 10, 3, 5, 1};?
medium
A. [5, 10, 4, 3, 1]
B. [10, 5, 4, 3, 1]
C. [1, 4, 3, 5, 10]
D. [1, 3, 4, 5, 10]
Solution
Step 1: Build max heap from array
Starting array: [4, 10, 3, 5, 1]. Max heap after heapify: [10, 5, 3, 4, 1].
Step 2: Extract max and sort
Swap 10 with last element, heapify reduced heap: [5, 4, 3, 1, 10]. Repeat until sorted: final sorted array is [1, 3, 4, 5, 10].
void HeapSort(int[] arr) {
int n = arr.Length;
for (int i = n / 2 - 1; i >= 0; i--) {
Heapify(arr, n, i);
}
for (int i = n - 1; i > 0; i--) {
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
Heapify(arr, n, 0);
}
}
void Heapify(int[] arr, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int 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) {
int swap = arr[i];
arr[i] = arr[largest];
arr[largest] = swap;
Heapify(arr, n, largest);
}
}
medium
A. Heapify call inside second loop uses wrong size parameter
B. The first for loop should start from n/2, not n/2 - 1
C. The second for loop condition should be i >= 0, not i > 0
D. Swap logic inside Heapify is incorrect
Solution
Step 1: Examine the second loop's Heapify call
After swapping arr[0] and arr[i], the effective heap size is i. However, the code calls Heapify(arr, n, 0), using the original full size n instead of the reduced size i. This is the error.
Step 2: Confirm other options are not errors
The first for loop should start from n/2, not n/2 - 1 is incorrect because it correctly starts at n/2 - 1. The second for loop condition should be i >= 0, not i > 0 is wrong because i > 0 is appropriate. Swap logic inside Heapify is incorrect is false; the swap is correct.
Final Answer:
Heapify call inside second loop uses wrong size parameter -> Option A
Quick Check:
Heapify in extract phase uses reduced size i, not n = B [OK]
Hint: Check loop bounds and heapify size carefully [OK]
Common Mistakes:
Changing loop start incorrectly
Using wrong loop end condition
Misunderstanding heap size in heapify
5. Given a large array with many duplicate values, which modification to the standard heap sort algorithm can improve its stability (preserving order of equal elements)?
hard
A. Use a min heap instead of a max heap
B. Sort the array twice with heap sort
C. Add an index field to elements and compare indices when values are equal
D. Skip heapify calls for duplicate values
Solution
Step 1: Understand stability in sorting
Stability means equal elements keep their original order after sorting.
Step 2: Analyze heap sort stability
Standard heap sort is not stable because heap operations can reorder equal elements arbitrarily.
Step 3: Find modification to improve stability
Adding an index field and comparing indices when values are equal preserves original order, making heap sort stable.
Final Answer:
Add an index field to elements and compare indices when values are equal -> Option C
Quick Check:
Use index to preserve order for stability = D [OK]
Hint: Use original indices to maintain stability in heap sort [OK]
Common Mistakes:
Thinking min heap makes sort stable
Skipping heapify breaks heap property
Sorting twice wastes time without stability
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.