调整堆函数:
void HeapAdjust(int * pArr, int parent, int length)
{
int temp = pArr[parent];
int child = 2 * parent + 1;
while (parent < length / 2)
{
if (child + 1 < length && pArr[child] < pArr[child + 1])
child++;
if (pArr[child] <= temp)
break;
pArr[parent] = pArr[child]; //调整父子结点之后,可能会对子节点为根的树产生影响,循环调整至满足条件
parent = child;
child = 2 * parent + 1;
}
pArr[parent] = temp;
}
堆排序函数:
void HeapSort(int * pArr,int length)
{
int i;
int temp;
for (i = length / 2 - 1;i >= 0;i--) //初始化堆
HeapAdjust(pArr, i, length);
for (i = length - 1;i > 0;i--) //将堆首尾元素交换位置,重新调整[0-length-1]堆结构。
{
temp = pArr[0];
pArr[0] = pArr[i];
pArr[i] = temp;
HeapAdjust(pArr, 0, i);
}
}