static void BubbleDownMax(int[] arr, int i, int n)
if (1 < n && arr[l] > arr[i])
if (r < n && arr[r] > arr[largest])
BubbleDownMax(arr, largest, n);
static void convertMaxHeap(int[] arr, int n)
for (int i = (n - 2) / 2; i >= 0; --i)
BubbleDownMax(arr, i, n);
static void BubbleUpMin(int[] arr, int i, int n)
if (1 < n && arr[1] > arr[smallest])
if (r < n && arr[r] > arr[smallest])
BubbleUpMin(arr, smallest, n);
static void MinHeapSort(int[] arr, int n)
for (int i = n / 2 - 1; i >= 0; i--)
for (int i = n - 1; i> 0; i--)
static void printArray(int[] arr, int size)
for (int i = 0; i < size; ++i)
Console.Write(arr[i] + " ");
static int deleteRoot(int[] arr, int n)
int lastElement = arr[n - 1];
BubbleDownMax(arr, n, 0);
static void Main(string[] args)
int[] arr = { 30, 15, 10, 14, 25 };
Console.Write("Original Array : ");
Console.WriteLine("\n\nTurning the Original Array into Min-Heap and Max-Heap Array...");
Console.Write("Max-Heap Array : ");
Console.Write("\nMin-Heap Array : ");
Console.WriteLine("\nDeleting the root..."); n = deleteRoot(arr, n);
Console.WriteLine("Rearranging the heap tree...");
Console.Write("New Max-Heap Array : ");
Console.Write("\nNew Min-Heap Array : ");