首先将数组中的元素生成大堆,依次将数组的第一个元素(大堆的根节点)与数组最后一个元素进行交换,在将数组的总个数依次减一,将数组重新生成大堆,依次,最终数组中的元素排列即为大堆的排序情况。

void Create(int parent, int a[], int size)

{

int child = 2 * parent + 1;

while (child < size)

{

if (child + 1 < size && a[child + 1] > a[child])

{

child++;

}

if (a[child]>a[parent])

{

swap(a[child], a[parent]);

parent = child;

child = 2 * parent + 1;

}

else

{

break;

}

}

}

void HeapSort(int a[], int size)

{

for (int i = (size - 2) / 2; i >= 0; i--)

{

Create(i, a, size);

}

for (int i = size - 1; i >= 0; i--)

{

swap(a[0], a[i]);

Create(0, a, i);

}

}