首先将数组中的元素生成大堆,依次将数组的第一个元素(大堆的根节点)与数组最后一个元素进行交换,在将数组的总个数依次减一,将数组重新生成大堆,依次,最终数组中的元素排列即为大堆的排序情况。
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);
}
}
原文地址:http://10810512.blog.51cto.com/10800512/1771210