前一段时间需要任职资格考试,于是又拿起丢了几年的数据结构书看了看,温习了一下常见的几个排序算法。今天特把我写的学习代码贴了出来。排序的算法常见有插入排序,选择排序与交换排序,较复杂一点还有归并排序与基数排序,概念性的东西我就不多说了,大家可以找一本严老师数据结构书看看。读大学时不觉得怎么样,现在再来看看,又结合这几年的编程经验,通过C++风格函数子造了一遍轮子。
排序算法
- 先来一个排序中的比较函数子,实现是左值小于右值。
template<typename T>struct CmpFuctor{ bool operator()(const T& lhs, const T& rhs) { return lhs < rhs; }};- 交换排序中用到的交换两个元素的函数。
template<typename T>void swap(T* lhs, T* rhs){ T tmp = *lhs; *lhs = *rhs; *rhs = tmp;}- 排序前后,我们自然要观察前后元素的顺序,那也少了下面这个函数。即遍历整个数组,再回调函数指针func,把元素通过引用传递出来。
template<typename T>void traverse(T* pArray, const int size, void (*func)(T&) ){ for(int idx =0; idx< size; idx++) { func(pArray[idx]); }