using buildMaximumHeap(T[] array) where T : IComparable { int

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace MvcTreeView{    public class HeapSort    {        public void Main(string args)        {            int mykeys = new int { 1,2,4, 5, -4, 11, 0, 18, 22, 67, 51, 6 };            printArrayList(mykeys);            heapSorting(mykeys);            printArrayList(mykeys);        }        private void heapSorting(T arrayList) where T : IComparable        {            int heap_Size = arrayList.Length;            buildMaximumHeap(arrayList);            for (int i = heap_Size – 1; i >= 1; i–)            {                swap(arrayList, i, 0);                heap_Size–;                sinkHeap(arrayList, heap_Size, 0);            }        }        private  void buildMaximumHeap(T array) where T : IComparable        {            int heap_Size = array.Length;            for (int i = (heap_Size / 2) – 1; i >= 0; i–)            {                sinkHeap(array, heap_Size, i);            }        }        private void sinkHeap(T array, int heapSize, int toSinkPost) where T : IComparable        {            if (getLeftKidPost(toSinkPost) >= heapSize)            {                return;            }            int largestKidPost;            bool leftIsLargest;            if (getRightKidPost(toSinkPost) >= heapSize || arraygetRightKidPost(toSinkPost).CompareTo(arraygetLeftKidPost(toSinkPost)) < 0)            {                largestKidPost = getLeftKidPost(toSinkPost);                leftIsLargest = true;            }            else            {                largestKidPost = getRightKidPost(toSinkPost);                leftIsLargest = false;            }            if (arraylargestKidPost.CompareTo(arraytoSinkPost) > 0)            {                swap(array, toSinkPost, largestKidPost);                if (leftIsLargest)                {                    sinkHeap(array, heapSize, getLeftKidPost(toSinkPost));                }                else                {                    sinkHeap(array, heapSize, getRightKidPost(toSinkPost));                }            }        }        private void swap(T array, int pos0, int pos1)        {            T tmpVal = arraypos0;            arraypos0 = arraypos1;            arraypos1 = tmpVal;        }        private int getLeftKidPost(int parentPost)        {            return (2 * (parentPost + 1)) – 1;        }        private int getRightKidPost(int parentPost)        {            return 2 * (parentPost + 1);        }        private void printArrayList(T arrayList)        {            foreach (T t in arrayList)            {                Console.Write(‘ ‘ + t.ToString() + ‘ ‘);            }        }    }}