0001 template <typename T> //向量选择排序 0002 void Vector<T>::selectionSort ( Rank lo, Rank hi ) { //0 <= lo < hi <= size 0003 while ( lo < --hi ) 0004 swap ( _elem[max ( lo, hi ) ], _elem[hi] ); //将[hi]与[lo, hi]中的最大者交换 0005 } 0006 0007 template <typename T> 0008 Rank Vector<T>::max ( Rank lo, Rank hi ) { //在[lo, hi]内找出最大者 0009 Rank mx = hi; 0010 while ( lo < hi-- ) //逆向扫描 0011 if ( _elem[hi] > _elem[mx] ) //且严格比较 0012 mx = hi; //故能在max有多个时保证后者优先,进而保证selectionSort稳定 0013 return mx; 0014 }