//建堆(大根堆或小根堆)
public static void BuildHeap(T[] items, HeapType heapType)
{
for (int i = items.Length >> 1; i >= 0; i--)
HeapifyArray(items, i, heapType);
}
//堆化数组
public static void HeapifyArray(T[] items, int index, HeapType heapType)
{
int i = index;
int left = (index << 1) + 1;
int right = (index << 1) + 2;
if (left < items.Length && items[left].CompareTo(items[i]) * (int)heapType > 0)
i = left;
if (right < items.Length && items[right].CompareTo(items[i]) * (int)heapType > 0)
i = right;
if (i != index)
{
SwapItem(items, index, i);
HeapifyArray(items, i, heapType);
}
}
public static void SwapItem(T[] items, int indexA, int indexB)
{
T value = items[indexA];
items[indexA] = items[indexB];
items[indexB] = value;
}