| | | | | |

Generic Insertion Sort

template < class BidirectionalIterator >
void g_insertion_sort (BidirectionalIterator beg, BidirectionalIterator end)
{
  BidirectionalIterator I, J, K;
  typename BidirectionalIterator::ValueType t;
  for (I = beg; I != end; ++I)
    {
      t = *I;
      for (K = I, J = K--; J != beg && t < *K; --J, --K)
        *J = *K;
      *J = t;
    }
}
// usage:
TList<int> L;
...
g_insertion_sort(L.Begin(), L.End());                // sorts in increasing order
g_insertion_sort(L.Begin(), L.End(), GreaterThan);   // sorts in decreasing order

| | Top of Page | 7. Generic Algorithms - 9 of 12