Code Fragment: BubbleSorts



template <typename Sequence>
void bubbleSort1(Sequence& S) {			// bubble-sort using ranks
  int n = S.size();
  for (int i = 0; i < n; i++)			// i-th pass
    for (int j = 1; j < n-i; j++)
      if ( S.elemAtRank(j-1) > S.elemAtRank(j) )
	S.swapElements(S.atRank(j-1), S.atRank(j));
}

template <typename Sequence>
void bubbleSort2(Sequence& S) {			// bubble-sort using positions
  typedef typename Sequence::Position Position;
  int n = S.size();
  for (int i = 0; i < n; i++) {			// i-th pass
    Position prec = S.first();
    for (int j = 1; j < n-i; j++) {
	Position succ = S.after(prec);
	if ( prec.element() > succ.element() )
	  S.swapElements(prec, succ);
	prec = succ;
    }
  }
}