程序填空题:Heap Sort
The function is to sort `N` elements in non-decreasing order by heap sort.
```c++
#define leftchild(i) ( 2*(i)+1 )
void PercDown( ElementType A[], int i, int N )
{ int child;
ElementType Tmp;
for ( Tmp = A[i]; leftchild(i) < N; i = child ) {
child = leftchild(i);
if (@@[child!=N-1 && A[child+1]>A[child]](3))
child ++;
if (@@[Tmp < A[child]](3)) A[i] = A[child];
else break;
}
@@[A[i] = Tmp](3);
}
void Heapsort( ElementType A[ ], int N )
{ int i;
for ( i = N / 2; i >= 0; i -- ) /* BuildHeap */
PercDown( A, i, N );
for ( i = N-1; i > 0; i -- ) {
Swap( &A[ 0 ], &A[ i ] );
@@[PercDown( A, 0, i )](3);
}
}
```
答案:
第1空:child!=N-1 && A[child+1]>A[child]
第2空:Tmp < A[child]
第3空:A[i] = Tmp
第4空:PercDown( A, 0, i )
```c++
#define leftchild(i) ( 2*(i)+1 )
void PercDown( ElementType A[], int i, int N )
{ int child;
ElementType Tmp;
for ( Tmp = A[i]; leftchild(i) < N; i = child ) {
child = leftchild(i);
if (@@[child!=N-1 && A[child+1]>A[child]](3))
child ++;
if (@@[Tmp < A[child]](3)) A[i] = A[child];
else break;
}
@@[A[i] = Tmp](3);
}
void Heapsort( ElementType A[ ], int N )
{ int i;
for ( i = N / 2; i >= 0; i -- ) /* BuildHeap */
PercDown( A, i, N );
for ( i = N-1; i > 0; i -- ) {
Swap( &A[ 0 ], &A[ i ] );
@@[PercDown( A, 0, i )](3);
}
}
```
答案:
第1空:child!=N-1 && A[child+1]>A[child]
第2空:Tmp < A[child]
第3空:A[i] = Tmp
第4空:PercDown( A, 0, i )