博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++】C++11 STL算法(十):使用STL实现排序算法
阅读量:4262 次
发布时间:2019-05-26

本文共 1600 字,大约阅读时间需要 5 分钟。

一、快速排序

1、适用于c++11版本
template 
void quicksort(ForwardIt first, ForwardIt last){
if(first == last) return; auto pivot = *std::next(first, std::distance(first,last)/2); ForwardIt middle1 = std::partition(first, last, [pivot](const decltype(*std::declval
()) &em){
return em < pivot; }); ForwardIt middle2 = std::partition(middle1, last, [pivot](const decltype(*std::declval
()) &em){
return !(pivot < em); }); quicksort(first, middle1); quicksort(middle2, last);}
2、适用于c++14版本
template 
void quicksort(ForwardIt first, ForwardIt last){
if(first == last) return; auto pivot = *std::next(first, std::distance(first,last)/2); ForwardIt middle1 = std::partition(first, last, [pivot](const auto& em){
return em < pivot; }); ForwardIt middle2 = std::partition(middle1, last, [pivot](const auto& em){
return !(pivot < em); }); quicksort(first, middle1); quicksort(middle2, last);}

二、选择排序

template
void selection_sort(ForwardIt begin, ForwardIt end){
for (ForwardIt i = begin; i != end; ++i) std::iter_swap(i, std::min_element(i, end));}

三、插入排序

template
void insertion_sort(ForwardIt begin, ForwardIt end){
for (ForwardIt i = begin; i != end; ++i) std::rotate(std::upper_bound(v.begin(), i, *i), i, i+1);}

四、归并排序

归并排序,详见,有动图演示

template
void merge_sort(Iter first, Iter last) {
if (last - first > 1) {
Iter middle = first + (last - first) / 2; merge_sort(first, middle); merge_sort(middle, last); std::inplace_merge(first, middle, last); }}

转载地址:http://sdmei.baihongyu.com/

你可能感兴趣的文章
Typescript中的泛型的使用
查看>>
JavaScript中使用offset时遇到的bug
查看>>
java基础入门(一)
查看>>
Java基础入门(二)
查看>>
Java基础入门(三)
查看>>
Java基础入门(四)
查看>>
Java基础入门(完结篇)
查看>>
Java进阶之面向对象(一)——继承
查看>>
Java进阶之自定义ArrayList&斗地主发牌案例
查看>>
JavaWeb之Ajax&json
查看>>
BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
查看>>
逻辑思维测试题
查看>>
如何用Easy CHM制作CHM格式电子书(帮助文档)
查看>>
为什么学习python
查看>>
华为进不了美国,并不是贸易保护这么简单
查看>>
markdown文件的基本常用编写语法(图文并茂)
查看>>
java变量简介
查看>>
Shell十分钟入门
查看>>
nginx 配置 upstream backup 报错
查看>>
Linux执行 wget命令:提示command not found的两种解决方法
查看>>