| | | | | |

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 | 8. Generic Algorithms - 9 of 12