OK.
1, [N / 2] -1 nodes;
2, Others Are Not Nodes;
3, Time <= 2nlog2 (n)
// Get the max hEAP
Void Sift (INT * A, INT N)
{
INT I, J, K;
For (i = (n / 2-1); i> = 0; I -)
{
K = I;
J = 2 * k 1;
INT TEMP = * (A K);
INT FLAG = 0;
While (Flag == 0 && J  { IF (* (A   J) <* (A   J   1)) J   ; IF (Temp <* (A   J)) { * (A   K) = * (a   j); K = J; } Else FLAG = 1; * (a   k) = TEMP; } } } Void Heapsort (int * a, int N, int out []) { INT K; INT I, J; J = 0; Int temp; SIFT (A, N); For (k = 0; k  Printf ("% d", a [k]); Printf ("/ n"); For (i = n-1; i> 1; I -) { OUT [J] = * A; J   ; // SWAP Temp = * a; * a = * (A   I); * (A   I) = TEMP; SIFT (A, I-1); } OUT [J] = a [0]> a [1]? a [0]: a [1]; OUT [J   1] = a [0] 
 }

