c_cpp 使用c ++ 11模板快速排序实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 使用c ++ 11模板快速排序实现相关的知识,希望对你有一定的参考价值。

#ifndef QUICK_SORT_YANG_15_02_19
#define QUICK_SORT_YANG_15_02_19
#include <functional>
#include <iterator>
#include <utility>
namespace yang {

namespace pivot {
  template
  < typename It
  , typename Offset = typename std::iterator_traits<It>::difference_type>
  constexpr Offset fst(It, It) { return 0; }
} /* namespace pivot */

template
< typename It
, typename Pred   = std::less_equal<
                    typename std::iterator_traits<It>::value_type>
, typename Picker =
    typename std::iterator_traits<It>::difference_type (It, It)
>
void qsort(It begin, It end
         , Pred p = Pred()
         , Picker picker = pivot::fst)
{
  if (end - begin <= 1) return;

  It pivot = begin;
  std::swap(*pivot, *begin);

  It i = begin + 1
   , j = begin + 1;
  while (j != end) {
    if (p(*begin, *j)) {
      ++j;
    } else {
      std::swap(*i++, *j++);
    }
  }

  std::swap(*begin, *(i - 1));
  qsort(begin, i - 1, p, picker);
  qsort(i, end, p, picker);
}

} /* namespace yang */
#endif

以上是关于c_cpp 使用c ++ 11模板快速排序实现的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 快速排序

c_cpp 快速排序

c_cpp 快速排序

c_cpp 快速排序

c_cpp 快速排序

c_cpp 快速排序