STL(二十三)排序算法

STL源码剖析——list容器的排序算法sort() 由于STL本身的排序算法sort接受的输入迭代器是随机访问迭代器,但是双向list链表容器的访问方式是双向迭代器,因此,不能使用STL本身的排序算法sort,必须自己定义属于自己访问的排序算法。我们从源码的剖析中,可以看到该排序算法思想类似于归并排序。 阅读详情

    Sorting algorithms是一组将无序序列排列成有序序列的模板函数或与排序相关的模板函数,提供了排序、折半搜索、归并、集合操作、堆操作、最值求解、字典比较和排列组合等功能。

      排序算法一般要求容器提供随机访问迭代器,一般适用于序列容器,如向量容器,队列容器和字符串容器等,但不适用于内部数据结构较为复杂的关联容器,如集合容器、映照容器、哈希集合容器和哈希映照容器等。

一、元素入堆push_heap

      在优先队列一章中,已对堆(heap)进行了简要的介绍,现在用迭代器的形式给出更为详细的说明和分析

二、创建堆make_heap

      make_heap算法重新排列元素顺序,使它们逻辑上构成一个堆

三、元素出堆pop_heap

    相对于元素入堆算法push_heap,pop_heap算法将元素进行出堆操作。与push_heap一样,pop_heap必须对堆操作才有意义。

四、堆排序sort_heap

是一种利用堆进行排序的算法

五、是否为堆is_heap

并不是C++标准算法函数,而是SGI C++ STL的一个扩展算法,用于判断迭代器区间[first, last)元素是否构成一个默认的大根堆,或依照二元谓词判断comp的有序关系,是否构成一个堆

六、局部排序partial_sort

仅对部分元素进行排序,通常用来挑选最小(或最大)的若干元素。由于内部使用堆排序来实现

七、局部排序复制partial_sort_copy

本质上也是实行局部的堆排序,只是排序结果被放置到另一个区间范围中

八、排序sort

与堆排序一样,sort算法也要求使用随机访问迭代器进行排序

九、归并merge

将两个具有相同升降方向的有序序列,合并成一个有序序列

十、内部归并inplace_merge

将一个序列内部两个升降同向的子序列进行排序合并

十一、隐定排序stable_sort

也是将区间元素排序,但可保持等价元素的相对顺序稳定不变

十二、是否排序is_sorted

用于判断区间元素是否排序

十三、第n个元素nth_element

直观地说,nth_element算法仅排序第nth元素(从0开始索引)

十四、下确界lower_bound

用于在有序的区间中查找首个不小于某值的元素(大于等于某值)

十五、上确界upper_bound

查找有序区间中首个大于某值的元素(大于某值)

十六、等价区间equal_range

用折半方法查找第一个和最后一个可以插入某值的元素,这些元素构成所谓的等价区间

十七、折半搜索binary_search

在有序的区间中用折半方法搜索等于某值的元素

十八、子集合includes

用于检测一个有序区间是否包含另一个有序区间,相当于一个集合包含关系的判断

十九、集合求并set_union

对两个序列区间的元素进行集合求并

二十、集合求交set_intersection

对两个有序区间的元素进行集合求交

二十一、集合求差set_difference

求两个有序区间元素集合的差

二十二、集合求异set_symmetric_difference

对两个有序区间的元素集合A和B进行求异

二十三、最小值min

min算法返回两个元素中的较小值

二十四、最大值max

返回两个元素中的较大值

二十五、最小元素min_element

返回区间中的最小元素

二十六、最大元素max_element

返回区间中的最大元素

二十七、字典比较lexicographical_compare

按字典方式给出两个区间序列的大小比较

二十八、下一排列组合next_permutation

对区间元素进行一次组合排序,使之字典顺序大于原来的排列

二十九、上一排列组合prev_permutation

用于选择一个字典顺序更小的排列

















C++ STL LIST SORT 排序算法图解 最近看 <<C++性能优化指南>> 留意到上面说 std::list::sort 算法能做到 O(nlog2(n)) 复杂度,而直接对 std::list 套用 std::sort 只能做到 O(n²) 思考后发现如果把 std::sort 套到 std::list 上由于是 Bidirectional Iterator 的原因,计算距离的时候需要一步一步的移动,经典的 ... 阅读详情

相关推荐

STL常用的排序算法

merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列。 例如:vecIntA,vecIntB,vecIntC是用vector声明的容器,vecIntA已包含1,3,5,7,9元素,vecIntB已包含2,4,6,8元素 vecIntC.resize(9); //扩大容量 merge(vecIntA.begin(),vecIntA.end(),vecIntB.begin(),vecIntB.end(),vecIntC.begin()); 此时ve

希望我的博客,能帮上你解决学习中工作中所遇到的问题 534

STL常用算法——排序算法

合并排序,merge() 函数用于将 2 个有序序列合并为 1 个有序容器,前提是这 2 个有序容器的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序容器,其排序规则也和这 2 个有序容器要相同。sort() 函数在对自定义的类对象实现排序时,需要在该类的内部提供移动构造函数和移动赋值运算符。sort():对容器或普通数组中范围内的元素进行排序,默认进行升序排序,也可以自定义排序规则。reverse()函数:将容器指定范围内的元素进行反转。函数原型:该函数有以下两种格式。

万里顾一程的博客 1941

博科的SAN交换机基本操作

2、添加用户testuser赋予user权限可以访问1-128VF默认VF为128账号描述"Test user"密码为password123。1、创建zone别名(100是指当前设备Domain ID,1和2是指对应的index号)2,删除新接入设备的ZONE或保持ZONE配置一致。3、将zone添加到当前生效的CFG中。2、将zone添加到当前生效的CFG中。3、将zone添加到当前生效的CFG中。3,将添加的级联端口持续关闭。4、将当前zone生效。4、将当前zone生效。1、查看当前所有用户。

chenjunokok的博客 1838

跟我学c++中级篇——STL算法之排序

一、排序算法 数据结构和算法里,或者说在计算机的算法里,排序算法一定是无法绕过的一个算法,而且排序算法种类很多,和树、堆等数据结构都多多少少的互相纠缠。常见的排序算法按不同的特点可以分为比较类型排序和非比较类型排序,内部排序和外部排序等,包括以下几种: 冒泡排序算法、选择排序算法、插入排序算法、快速排序算法、希尔排序算法、堆排序算法、归并排序算法。其它如基数排序算法、桶排序算法和计数排序算法,不是很常见。 其主要的特征如下: order 排序是基本的算法,在各种语言和库中都或多或少的有封装,...

fpcc的专栏 661

Springboot + vue 实现导出word

Springboot + vue 实现导出word 后端代码 使用word先创建好已知的模板 使用word工具另存为.xml格式的文件 使用freemarker ftl模板 将修改后的xml文件复制到开发工具中,将文件后缀修改为ftl文件,并且将里面的动态值使用${}包裹例如:${zyjn} word工具类 /*** * * Project Name:maventest * <p>生成word工具类<br> * * @ClassName: WordUtil *

qq_45542373的博客 2895

【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)

本文针对传统A算法在机器人路径规划中存在的搜索效率低、路径不平滑等问题,提出了一种改进型A算法。该算法通过引入跳点搜索(JPS)技术优化子节点扩展方式,结合贝塞尔曲线或B样条曲线进行路径平滑处理,并采用动态启发式函数和自适应邻域搜索策略,显著提升了路径规划的效率和路径质量。实验结果表明,改进型A*算法在复杂环境下能有效减少搜索节点数量,缩短路径长度,提高路径平滑性,且具备动态避障能力。

2501_92867626的博客 1583

【C++STL】快速排序算法(sort)的原理与使用

`std::sort` 是 C++ 标准库中提供的排序算法,它使用的是一种经典的排序算法——**快速排序**(Quicksort)或者是其变种。 快速排序是一种基于比较的排序算法,通过不断地选择一个基准值(pivot),将待排序序列分割为两个子序列,其中一个子序列的所有元素小于等于基准值,另一个子序列的所有元素大于基准值。然后递归地对两个子序列进行排序,最终得到有序序列。

AAADiao的博客 1万+

EDKII实战:手把手调试PciHostBridge.c,看UEFI如何分配你的PCIe设备资源(IO/Memory空间)

本文深入解析EDKII中PciHostBridge.c模块的工作原理,详细指导如何调试PCIe设备资源分配(IO/Memory空间)。通过实战案例展示UEFI环境下Root Bridge初始化、地址空间转换及协议安装等核心流程,提供常见问题排查方法与性能优化建议,帮助开发者解决PCIe设备兼容性问题。

weixin_29201933的博客 208

STL之算法——排序算法

一:介绍 常用的STL排序算法包括sort,reverse,merge,random_shuffle。 二:sort:对容器内元素进行排序 1.函数原型 sort(iterator begin, iterator end) 默认以升序方式对元素进行排序 sort(iterator begin, iterator end, _Pred) 自定义方式对元素排序 2.操作 #include <iostream> #include <algorithm> #include &

qq_38082979的博客 2072

新手必看:Infineon Memtools烧录配置全流程(附常见错误解决方案)

本文为嵌入式开发新手提供了Infineon AURIX开发环境搭建与Memtools烧录的全流程实战指南。详细解析了ADS、DAS和Memtools三大核心工具的角色与协同关系,并重点讲解了Memtools的图形界面配置步骤、烧录操作流程,以及针对“无法连接设备”、“编程失败”等常见错误的系统性排查与解决方案,帮助开发者快速上手并规避典型陷阱。

weixin_29189377的博客 634

银河麒麟V10+QT6.0中文输入法环境搭建全攻略(附镜像加速技巧)

本文提供了在银河麒麟V10操作系统上为QT6.0搭建中文输入法环境的完整实战指南。文章详细介绍了从系统准备、镜像源优化、QT6安装器获取与加速安装,到编译Fcitx5输入法插件依赖库、深度配置环境变量与项目的全流程。重点分享了使用国内镜像源加速安装的技巧,解决了国产化开发中QT应用无法输入中文的常见难题,旨在帮助开发者快速构建稳定高效的开发环境。

weixin_29204749的博客 394

STL——排序算法

random_shuffle洗牌算法使用时需要加随机数种子。merge合并两个容器必须是有序序列。容器元素合并,并存储到另一容器中。指定范围内的元素随机调整次序。两个容器必须是有序的。

weixin_64238628的博客 1057

一代测序、二代测序以及三代测序的优缺点及应用对比?

一、初现庐山真面目 一代测序:又称Sanger测序(多分子,单克隆) 历史:第一代DNA测序技术(又称Sanger测序)在1975年,由Sanger等人开创,并在1977年完成第一个基因组序列(噬菌体X174),全长5375个碱基。研究人员经过30年的实践并对技术及测序策略的不断改进(如使用了不同策略的作图法、鸟枪法),2001年完成的首个人类基因组图谱就是以改进了的Sanger法为其测序基础。 原理:在4个DNA合成反应体系(含dNTP)中分别加入一定比例带有标记的ddNTP(分为:ddATP...

wangprince2017 3万+

C++——STL排序算法介绍

对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的bug中。这时,你想找一种工具,已经帮你实现这些功能,你想怎么用就怎么用,同时不影响性能。你需要的就是STL

shineHoo的专栏 1万+

Transformer模型详解

​本文主要介绍Transformer系列,从基础到理论,对注意力机制进行总结并解释《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5306

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++中STL算法之排序算法——sort

文章目录1.排序算法介绍1.1 对所有元素进行排序1.2 局部排序1.3 自带的一些比较准则2.排序算法的常见用法2.1 标准元素的排序2.2 自定义的元素排序2.2.1 写比较函数 1.排序算法介绍 STL提供的排序算法主要包含以下几个: 函数名 功能描述 sort() 对给定区间所有元素进行排序 stable_sort() 对给定区间所有元素进行稳定排序,即保持想等元素间的...

75 69 69 80 32 67 79 68 73 78 71 33 2236

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STL排序算法

STL排序算法 STL简介 STL:标准模板库。 包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组,链表,字典等。 使用方便,效率较高 要使用其中的算法,需要#include sort排序 用法一: 对基本数据类型的数组从小到大排序: sort(数组名+n1,数组名+n2); ​ n1和n2都是int类型的表达式,可以包含变量。 ​ 如果n1=0,则+n1可以不写 将数组中下标范围为[n1,n2)的元素从小到大排序。下标为n2的元素不在排序区间内。 例如: int a[]={12,

羽的博客 1365

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++学习笔记(三十六)——STL之排序算法

STL 提供了一些常用的排序算法,用于对容器中的元素进行排序。它们位于 <algorithm> 头文件中。

weixin_45857378的博客 1509

STL源码剖析——STL算法之sort排序算法

本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的快速排序,而是交叉利用各种排序:堆排序、插入排序和快速排序;这样做的目的是提高效率,针对数据量比较大的采用快速排序,数据量比较小的可以采用堆排序或插入排序。

关注校招求职,微信号:job_campus 2168

【C++】STL标准容器的排序操作和选择合适的排序算法

转自:https://www.cnblogs.com/followyourdream/p/3316667.html# STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。 排序是最广泛的算法之一,本文详细介绍了STL中不同排序算法的用法和区别。 1 STL提供的Sort 算法 STL提供的不同的函数,不同的函数,实现的算法又不尽

我的笔记本 1802

STL中sort排序算法原理

1、所有sort算法介绍所有的sort算法的参数都需要输入一个范围,[begin,end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAccessIterator), 也就是说可以随机访问的迭代器,如:it+n什么的。(partition 和stable_partition 除外)如果需要自己定义比较函数,可以把定义好的仿函数(functor)作为参数传入。每种算法都支持传入比

爱橙子的OK绷的专栏 3514

list排序_STL之list排序算法图解

“ 山重水复疑无路,柳暗花明又一村。”之前我们在STL之list源码剖析(二)一文中曾经剖析过list的排序算法sort,我最近在做项目的时候需要对自定义类型的list进行排序,所以借此机会把sort的算法思想在深入学习一下。0. STL中list的sort函数图解sort函数的简化源码如下所示:// 按升序进行排序,list链表的迭代器访问时双向迭代器template <clas...

weixin_39968760的博客 915

STL中的排序算法一览

<br /><br />STL中有多种排序算法,各有各的适用范围,下面听我一一道来:<br /><br />I、完全排序<br />sort() <br />首先要隆重推出的当然是最最常用的sort了,sort有两种形式,第一种形式有两个迭代器参数,构成一个前开后闭的区间,按照元素的 less 关系排序;第二种形式多加一个指定排序准则的谓词。sort基本是最通用的排序函数,它使用快速排序算法,并且在递归过程中,当元素数目小于一个阈值(一般是16,我的试验是24)时,转成直接插入排序。伟大的数学家Knuth已

xiaoquanhuang的专栏 593

STL中各种排序算法的区别

在此之前,我所知道的STL中的排序算法只有sort.但是,经过实践发现单单sort并不是那么够用的。 事实上, STL中的算法分为好多种。1.partition2.stable_partition3.nth_element4.partial_sort5.sort6.stable_sort下面我们来讲一下他们的区别所在。一、partition算法可以把满足

xiaoc's home 1332
上一篇: STL(二十二)变易算法
下一篇: STL(二十四)数值算法
CopperDong
博客等级 码龄14年 1205粉丝 466原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值