0001 template <typename T> T SMMH<T>::delMax() { //delMax from a non-empty SMMH 0002 if ( _size < 4 ) return _elem[--_size]; //trivial cases 0003 T maxElem = _elem[2]; Rank k = 2; _elem[k] = _elem[--_size]; //initialization 0004 while (1) { //percolate down 0005 Rank x = k; 0006 Rank i = rc(k); if ( (i < _size) && (_elem[i] > _elem[x]) ) x = i; 0007 Rank j = rn(k); if ( (j < _size) && (_elem[j] > _elem[x]) ) x = j; 0008 if ( x == k ) break; 0009 swap(_elem[k], _elem[x]); k = x; //Property #2 0010 if ( _elem[k-1] > _elem[k] ) swap( _elem[k-1], _elem[k]); //Property #0 0011 } 0012 return maxElem; 0013 } //delMax