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
|