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