Code
namespace MaxHeap
{
class Program
{
static void Main(string[] args)
{
int[] a = new int[] { 3, 4, 1,7,9,23,45,12 };
MaxHeap heap = new MaxHeap(a);
// heap.BulidMaxHeap();
heap.HeapSort();
heap.Print();
// Console.Write(heap.Max());
}
}
public class MaxHeap
{
int[] content;
int length;
int heapSize;
public MaxHeap(int[] a)
{
content = a;
length = content.Length;
heapSize = content.Length;
}
private void MaxHeapify(int[] a,int i)
{
int left = i * 2 + 1;
int right = (i + 1) * 2;
int largest,temp;
if (left < heapSize && a[left] > a[i])
{
largest = left;
}
else
{
largest=i;
}
if (right < heapSize && a[right] > a[largest])
{
largest = right;
}
if (largest != i)
{
temp = a[largest];
a[largest] = a[i];
a[i] = temp;
MaxHeapify(a, largest);
}
}
private void BulidMaxHeap()
{
for (int i = (length-1) / 2; i >= 0; i--)
{
MaxHeapify(content, i);
}
}
public void HeapSort()
{
BulidMaxHeap();
int temp;
for (int i = length - 1; i > 0; i--)
{
temp = content[0];
content[0] = content[i];
content[i] = temp;
heapSize -= 1;
MaxHeapify(content, 0);
}
}
public int Max()
{
return content[0];
}
public void Print()
{
foreach (int i in content)
{
Console.WriteLine(i);
}
}
}
}
namespace MaxHeap
{
class Program
{
static void Main(string[] args)
{
int[] a = new int[] { 3, 4, 1,7,9,23,45,12 };
MaxHeap heap = new MaxHeap(a);
// heap.BulidMaxHeap();
heap.HeapSort();
heap.Print();
// Console.Write(heap.Max());
}
}
public class MaxHeap
{
int[] content;
int length;
int heapSize;
public MaxHeap(int[] a)
{
content = a;
length = content.Length;
heapSize = content.Length;
}
private void MaxHeapify(int[] a,int i)
{
int left = i * 2 + 1;
int right = (i + 1) * 2;
int largest,temp;
if (left < heapSize && a[left] > a[i])
{
largest = left;
}
else
{
largest=i;
}
if (right < heapSize && a[right] > a[largest])
{
largest = right;
}
if (largest != i)
{
temp = a[largest];
a[largest] = a[i];
a[i] = temp;
MaxHeapify(a, largest);
}
}
private void BulidMaxHeap()
{
for (int i = (length-1) / 2; i >= 0; i--)
{
MaxHeapify(content, i);
}
}
public void HeapSort()
{
BulidMaxHeap();
int temp;
for (int i = length - 1; i > 0; i--)
{
temp = content[0];
content[0] = content[i];
content[i] = temp;
heapSize -= 1;
MaxHeapify(content, 0);
}
}
public int Max()
{
return content[0];
}
public void Print()
{
foreach (int i in content)
{
Console.WriteLine(i);
}
}
}
}