using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AlgorithmTest
{
class HeapSort
{
private void Max_Heapify ( int[] arr,int hLen, int i )
{
int left = 2*i;
int right = 2 * i +1;
int largest = i;
if (left <= hLen-1 && arr[left] > arr[i])
{
largest = left;
}
if (right <= hLen-1 && arr[right] > arr[largest])
{
largest = right;
}
if (largest != i)
{
int temp = arr[largest];
arr[largest] = arr[i];
arr[i] = temp;
Max_Heapify(arr, hLen, largest);
}
}
private void Build_Max_Heap ( int[] arr )
{
int hLen = arr.Length;
int half = (hLen-1)/2;
for (int i = half; i >= 0; i--)
{
Max_Heapify(arr,hLen, i);
}
}
public void Heap_Sort ( int[] arr )
{
Build_Max_Heap(arr);
int hlen = arr.Length;
for (int i = arr.Length -1; i >= 1; i--)
{
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
hlen--;
Max_Heapify(arr, hlen, 0);
}
}
}
}