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) { //sift 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