diff --git a/inc/hgl/util/sort/Sort.h b/inc/hgl/util/sort/Sort.h index e77340f..a2d7e29 100644 --- a/inc/hgl/util/sort/Sort.h +++ b/inc/hgl/util/sort/Sort.h @@ -3,72 +3,73 @@ #include #include + +template class SortBase +{ +protected: + + T *buffer; //数据 + int number; //数据个数 + + Comparator *comp; //比较函数类 + +public: + + /** + * 本类构造函数 + * @param buf 数据缓冲区 + * @param n 数据个数 + * @param c 数据大小比较类 + */ + SortBase(T *buf,int n,Comparator *c) + { + buffer =buf; + number =n; + comp =c; + } + + virtual ~SortBase()=default; + + int GetCount()const + { + return number; + } + + int compare(const T &a,const T &b) + { + return comp->compare(a,b); + } + + virtual int compare_by_index(int a,int b) + { + return comp->compare(buffer[a],buffer[b]); + } + + virtual void exchange(T &a,T &b) + { + comp->exchange(a,b); + } + + virtual void exchane_by_index(int a,int b) //交换两个数据 + { + comp->exchange(buffer[a],buffer[b]); + } + + virtual void cpy(T *dst,T *src) + { + comp->cpy(dst,src); + } + + virtual void cpy_by_index(int dst,int src) + { + comp->cpy(buffer+dst,buffer+src); + } + + virtual bool sort()=0; //排序 +};//struct SortBase + namespace hgl { - template class SortBase - { - protected: - - T *buffer; //数据 - int number; //数据个数 - - Comparator *comp; //比较函数类 - - public: - - /** - * 本类构造函数 - * @param buf 数据缓冲区 - * @param n 数据个数 - * @param c 数据大小比较类 - */ - SortBase(T *buf,int n,Comparator *c) - { - buffer =buf; - number =n; - comp =c; - } - - virtual ~SortBase()=default; - - int GetCount()const - { - return number; - } - - int compare(const T &a,const T &b) - { - return comp->compare(a,b); - } - - virtual int compare_by_index(int a,int b) - { - return comp->compare(buffer[a],buffer[b]); - } - - virtual void exchange(T &a,T &b) - { - comp->exchange(a,b); - } - - virtual void exchane_by_index(int a,int b) //交换两个数据 - { - comp->exchange(buffer[a],buffer[b]); - } - - virtual void cpy(T *dst,T *src) - { - comp->cpy(dst,src); - } - - virtual void cpy_by_index(int dst,int src) - { - comp->cpy(buffer+dst,buffer+src); - } - - virtual bool sort()=0; //排序 - };//struct SortBase - //堆排序 template class HeapSort:public SortBase { @@ -111,7 +112,7 @@ namespace hgl bool sort() { - if(!SortBase::buffer||SortBase::number<=2||!SortBase::comp) + if(!SortBase::buffer||SortBase::number<2||!SortBase::comp) return(false); int i;