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 快速排序