// Heap Sort
int LeftChild( int i ) { return ( 2 * ( i ) + 1 );}
void PercDown( vector<int> &A, int i, int N )
{
int Child;
int Tmp;
for( Tmp = A[ i ]; LeftChild( i ) < N; i = Child )
{
Child = LeftChild( i );
if( Child != N - 1 && A[ Child + 1 ] > A[ Child ] )
Child++;
if( Tmp < A[ Child ] )
A[ i ] = A[ Child ];
else
break;
}
A[ i ] =Tmp;
}
void Heapsort(vector<int> &A)
{
if (A.size() <= 1)
return;
int N = A.size();
for( int i = N / 2; i >= 0; i-- ) /* BuildHeap */
PercDown( A, i, N );
for( int i = N - 1; i > 0; i-- )
{
int temp = A[ 0 ];
A[ 0 ] = A[ i ];
A[ i ] = temp; /* DeleteMax and to last position*/
PercDown( A, 0, i );
}
}
堆排序// Heap Sort int LeftChild( int i ) { return ( 2 * ( i ) + 1 );} void PercDown( vector &A, int i, int N ) { int Child; int Tmp; for( Tmp = A[ i ]; LeftChild( i