前面提到了仿函数,那么这里就利用仿函数实现了选择排序: 首先定义一个仿函数模板: template<typename T> struct my_larger:public std::binary_function<T,T,bool> { bool operator()(T arg1,T arg2) { return arg1>arg2; } }; 然后是选择排序的实现: template<typename Iterator,typename Func> void select_sort(Iterator first,Iterator last,Func func) { return __select_sort(first,last,*first,func); } template<typename Iterator,typename T,typename Func> void __select_sort(Iterator first,Iterator last,T,Func func) { T tempValue; Iterator tempIter; for(;first!=last;++first) { tempIter=first; for(Iterator iter=first+1;iter!=last;++iter) if(func(*tempIter,*iter)) tempIter=iter; tempValue=*first; *first=*tempIter; *tempIter=tempValue; } } 完整代码: #include<functional> template<typename T> struct my_larger:public std::binary_function<T,T,bool> { bool operator()(T arg1,T arg2) { return arg1>arg2; } }; template<typename Iterator,typename Func> void select_sort(Iterator first,Iterator last,Func func) { return __select_sort(first,last,*first,func); } template<typename Iterator,typename T,typename Func> void __select_sort(Iterator first,Iterator last,T,Func func) { T tempValue; Iterator tempIter; for(;first!=last;++first) { tempIter=first; for(Iterator iter=first+1;iter!=last;++iter) if(func(*tempIter,*iter)) tempIter=iter; tempValue=*first; *first=*tempIter; *tempIter=tempValue; } } 测试代码: #include"select_sort.h" #include<time.h> #include<stdlib.h> #include<vector> #include<iostream> using namespace std; int main() { srand((int)time(0)); vector<int> iVector; for(int i=0;i!=100;++i) iVector.push_back(rand()%100); for(vector<int>::iterator iter=iVector.begin();iter!=iVector.end();++iter) cout<<*iter<<" "; cout<<endl; select_sort(iVector.begin(),iVector.end(),my_larger<int>()); for(vector<int>::iterator iter=iVector.begin();iter!=iVector.end();++iter) cout<<*iter<<" "; cout<<endl; system("pause"); return 0; }