/*
堆排序的基本思想:将所有元素初始化一个最大堆,然后将第一个元素即最大元素与最后一个元素交换;
再对前n-1个元素调整为一个最大堆,就这样依次进行,每次都是把最大元素放到最后边。
*/
void MaxHeapify(int*list,int size,int root)
{
int lChild=2*(root+1)-1,rChild=lChild+1;//根节点的左右孩子节点
while(rChild<size)//如果右孩子节点存在
{
if(list[root]>=list[lChild]&&list[root]>=list[rChild])//如果根节点大于左右孩子节点表明以root为根节点的树已经为最大堆
return;
if(list[lChild]>list[rChild])//如果左孩子大,则选左孩子作为根节点
{
int temp=list[lChild];
list[lChild]=list[root];
list[root]=temp;
root=lChild;
}
else//右孩子大
{
int temp=list[rChild];
list[rChild]=list[root];
list[root]=temp;
root=
堆排序的基本思想:将所有元素初始化一个最大堆,然后将第一个元素即最大元素与最后一个元素交换;
再对前n-1个元素调整为一个最大堆,就这样依次进行,每次都是把最大元素放到最后边。
*/
void MaxHeapify(int*list,int size,int root)
{
int lChild=2*(root+1)-1,rChild=lChild+1;//根节点的左右孩子节点
while(rChild<size)//如果右孩子节点存在
{
if(list[root]>=list[lChild]&&list[root]>=list[rChild])//如果根节点大于左右孩子节点表明以root为根节点的树已经为最大堆
return;
if(list[lChild]>list[rChild])//如果左孩子大,则选左孩子作为根节点
{
int temp=list[lChild];
list[lChild]=list[root];
list[root]=temp;
root=lChild;
}
else//右孩子大
{
int temp=list[rChild];
list[rChild]=list[root];
list[root]=temp;
root=