/*
* @note :9 种常用排序算法 c++ 模板实现
* @author :Andy.Ro
* @email :Qwuloo@qq.com
* @date :2011-04
*
*/
#ifndef _XSORT_H_INCLUDE_
#define _XSORT_H_INCLUDE_
/*
* 函数模板声明 : template < class _TYPE > RET_TYPE __name ( ... ) ;
* 类模板声明 : template < class _TYPE > class __name ;
* 函数模板特化 : template < > RET_TYPE __name < _TYPE > ( ... ) ;
* 类模板特化 : template < > class __name < _TYPE > { ... } ;
* 函数模板友元 : friend RET_TYPE __name < _TYPE > ( ... ) ; ( 标准版 )
* 类模板友元 : friend class __name < _TYPE > ;
* 函数模板调用 : __name < _TYPE > ( ... ) ;
*/
#define _GT(a, b) ((a) > (b) )
#define _LT(a, b) ((b) > (a) )
#define _EQ(a, b) ((a) == (b))
#define _GE(a, b) (_GT(a, b) || _EQ(a, b))
#define _LE(a, b) (_LT(a, b) || _EQ(a, b))
//------------------------------------------------------------------------
// " > " " < " " == " " >= " " <= "
template< class _TX, class _TY >
__forceinline bool GT(_TX a, _TY b) { return _GT(a, b); }
template< class _TX, class _TY >
__forceinline bool LT(_TX a, _TY b) { return _LT(a, b); }
template< class _TX, class _TY >
__forceinline bool EQ(_TX a, _TY b) { return _EQ(a, b); }
template< class _TX, class _TY >
__forceinline bool GE(_TX a, _TY b) { return _GE(a, b); }
template< class _TX, class _TY >
__forceinline bool LE(_TX a, _TY b) { return _LE(a, b); }
// reference
template< class _TYPE, class REF_TYPE >
__forceinline REF_TYPE & Ref(_TYPE & o, REF_TYPE *) { return REF_TYPE(o); }
// set
template< class _TYPE, class ARG_TYPE >
__forceinline void Set(_TYPE & a, ARG_TYPE b) { a = b; }
// swap
template< class _TYPE >
__forceinline void Swap(_TYPE & a, _TYPE & b) { _TYPE _t = a; a = b; b = _t; }
// construct
template< class _TYPE >
__forceinline void Construct(_TYPE & o) {}
// destruct
template< class _TYPE >
__forceinline void Destruct (_TYPE & o) {}
//------------------------------------------------------------------------
// xSort<_TYPE,_KEY,_VAL> 节点
//------------------------------------------------------------------------
template< class _TYPE, class _KEY, class _VAL >
class xSort
{
public:
//------------------------------------------------------------------------
// @note:插入排序
static void _insert(_TYPE * const beg, _TYPE * const end, bool const & Desc = false);
//------------------------------------------------------------------------
// @note:希尔排序
static void _shell(_TYPE * const beg, _TYPE * const end, bool const & Desc = false);
//------------------------------------------------------------------------
// @note:直接选择
static void _select(_TYPE * const beg, _TYPE * const end, bool const & Desc = false);
//------------------------------------------------------------------------
// @note:冒泡排序
static void _bubble(_TYPE * const beg, _TYPE * const end, bool const & Desc = false);
//------------------------------------------------------------------------
// @note:快速排序
static void _quick(_TYPE * const beg, _TYPE * const end, bool const & Desc = false);
//------------------------------------------------------------------------
// @note:二分插入
static void _two(_TYPE * const beg, _TYPE * const end, bool const & Desc = false);
//------------------------------------------------------------------------
// @note:二路归并
static void _merge(_TYPE * const beg, _TYPE * const end, bool const & Desc = false);
//------------------------------------------------------------------------
// @note:二路归并(递归法)
static void _merge_r(_TYPE * const beg, _TYPE * const end, bool const & Desc = fa
最完整的 9 种常用排序算法 c++ 模板实现
最新推荐文章于 2023-02-01 19:56:21 发布
本文提供了一组C++模板实现的常见排序算法,包括插入排序、希尔排序、选择排序、冒泡排序、快速排序、二分插入排序、二路归并排序、归并排序(递归法)和堆排序。这些模板适用于不同类型的元素,并可选择升序或降序排列。
摘要由CSDN通过智能技术生成