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);
}
}