int nHeapSize = 0;//当前堆大小
void Max_Heap(int *A,int i) //调整为大根堆
{
int left = 2*i;
int right = 2*i+1;
int large = i;
int nSwitchTemp;
if (left <= nHeapSize && A[left] > A[large])
{
large = left;
}
if (right <= nHeapSize && A[right] > A[large])
{
large = right;
}
if (large != i)
{
nSwitchTemp = A[i];
A[i] = A[large];
A[large] = nSwitchTemp;
Max_Heap(A,large);
}
}
void Build_Heap(int *A,int N)//从最后一个非叶子节点向前建堆
{
int i;
for(i = N/2;i>=1;i--)
{
Max_Heap(A,i);
}
}
void Heap_Sort(int *A,int N) // A为待排序数组指针,N为元素个数,数据从A[1]开始存放,A[0]不使用
{
nHeapSize = N; //初始化堆大小为整个数组
int nSwitchTemp,i;
Build_Heap(A,N);//建立大根堆
for (i = N;i >= 2;i--)
{
nSwitchTemp = A[i];
A[i] = A[1];
A[1] = nSwitchTemp;
nHeapSize--;
Max_Heap(A,1);
}
}