0001 template <typename T> T SMMH<T>::delMin() { //delMin from a non-empty SMMH 0002 T minElem = _elem[1]; Rank k = 1; _elem[k] = _elem[--_size]; //initialization 0003 while (1) { //percolate down 0004 Rank x = k; 0005 Rank i = lc(k); if ( (i < _size) && (_elem[i] < _elem[x]) ) x = i; 0006 Rank j = ln(k); if ( (j < _size) && (_elem[j] < _elem[x]) ) x = j; 0007 if ( x == k ) break; 0008 swap(_elem[k], _elem[x]); k = x; //Property #1 0009 if ( (k+1 < _size) && (_elem[k] > _elem[k+1]) ) swap( _elem[k], _elem[k+1]); //Property #0 0010 } 0011 return minElem; 0012 } //delMin