📄 fig07_10.cpp
字号:
/**
* Standard heapsort.
*/
template <typename Comparable>
void heapsort( vector<Comparable> & a )
{
for( int i = a.size( ) / 2; i >= 0; i-- ) /* buildHeap */
percDown( a, i, a.size( ) );
for( int j = a.size( ) - 1; j > 0; j-- )
{
swap( a[ 0 ], a[ j ] ); /* deleteMax */
percDown( a, 0, j );
}
}
/**
* Internal method for heapsort.
* i is the index of an item in the heap.
* Returns the index of the left child.
*/
inline int leftChild( int i )
{
return 2 * i + 1;
}
/**
* Internal method for heapsort that is used in deleteMax and buildHeap.
* i is the position from which to percolate down.
* n is the logical size of the binary heap.
*/
template <typename Comparable>
void percDown( vector<Comparable> & a, int i, int n )
{
int child;
Comparable tmp;
for( tmp = a[ i ]; leftChild( i ) < n; i = child )
{
child = leftChild( i );
if( child != n - 1 && a[ child ] < a[ child + 1 ] )
child++;
if( tmp < a[ child ] )
a[ i ] = a[ child ];
else
break;
}
a[ i ] = tmp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -