//最近在研究STL和泛型,今后将试着写泛型程序,
//下面是我的第一个泛型程序,希望大家看了不要笑啊,
//如果那里不好,欢迎大家提出,多谢!
//我的第一个泛型算法,插入排序
//支持random access iterator,经试验对数组、vector 、list都可用
//支持random access iterator,经试验对数组、vector 、list都可用
namespace ning
{
{
//此函数__sort,为内部函数,被sort调用,不对外提供接口
template<class Iterator, class Distance, class T>
void _sort(Iterator first, Distance len, Distance holeIndex, T key)
{
Distance pre;
while (holeIndex < len)
{
key = *(first + holeIndex);
pre = holeIndex - 1;
while (pre >= Distance(0) && *(first + pre) > key)
{
*(first + pre + 1) = *(first + pre);
--pre;
}
*(first + pre + 1) = key;
++holeIndex;
}
}
template<class Iterator, class Distance, class T>
void _sort(Iterator first, Distance len, Distance holeIndex, T key)
{
Distance pre;
while (holeIndex < len)
{
key = *(first + holeIndex);
pre = holeIndex - 1;
while (pre >= Distance(0) && *(first + pre) > key)
{
*(first + pre + 1) = *(first + pre);
--pre;
}
*(first + pre + 1) = key;
++holeIndex;
}
}
//此函数对外提供接口
template<class Iterator>
void sort(Iterator first, Iterator last)
{
typedef typename iterator_traits<Iterator>::value_type value_type;
typedef typename iterator_traits<Iterator>::difference_type difference_type;
//typedef typename iterator_traits<Iterator>::iterator_category iterator_category;
value_type key(0);
_sort(first, difference_type(last - first), difference_type(1), key);
}
}
void sort(Iterator first, Iterator last)
{
typedef typename iterator_traits<Iterator>::value_type value_type;
typedef typename iterator_traits<Iterator>::difference_type difference_type;
//typedef typename iterator_traits<Iterator>::iterator_category iterator_category;
value_type key(0);
_sort(first, difference_type(last - first), difference_type(1), key);
}
}
//欢迎大家提出宝贵意见啊 !