0001 Rank spCheck(Vector<Rank>& B) { //B = unsort[1,n] 0002 Rank n = B.size(); Rank A = 1; //输入栈 = <1,2,3,...,n],只需记录栈顶 0003 Stack<Rank> S; S.push(0); //中转栈:预埋哨兵0 0004 for (Rank r = 0; r < n; S.pop(), r++) //逐项模拟:在执行对应的B操作之前 0005 while (B[r] != S.top()) //将目标元素腾挪至S栈顶 0006 if (B[r] < A) return r; //A已空或不含B[r],则已卡住 0007 else S.push(A++); //通过A操作,接近目标元素 0008 return n; //成功 0009 } //尽管形式上是两重循环,但渐近复杂度不超过栈S的操作总数,运用稍后将要介绍的聚合法,可知总体为O(n)