0001 template <typename T> Rank Vector<T>::partition(Rank lo, Rank hi) { //LUG版: lo < hi 0002 swap(_elem[lo], _elem[dice(lo, hi)]); //从[lo,hi)内任选一个元素与首元素交换 0003 const T pivot = _elem[lo]; //经以上交换,等效于随机确定候选轴点 0004 for (bool G = true; lo < hi; ) //两端交替向内拓展,逐渐靠拢,直至相遇(lo==hi) 0005 if (G) //向左拓展后缀G:遇到阻挡者则归入L,并换向 0006 { if (pivot > _elem[--hi]) { _elem[lo] = _elem[hi]; G = false; } } 0007 else //向右拓展前缀L:遇到阻挡者则归入G,并换向 0008 { if (_elem[++lo] > pivot) { _elem[hi] = _elem[lo]; G = true; } } 0009 _elem[lo] = pivot; return lo; //轴点就位,返回其秩 0010 } //partition - LUG