STL中各种排序算法的区别

学生成绩排序、按照各单科成绩排序、总分排序 学生成绩管理C++。按照各单科成绩排序、总分排序。 立即下载

在此之前,我所知道的STL中的排序算法只有sort.

但是,经过实践发现单单sort并不是那么够用的。

 

事实上, STL中的算法分为好多种。

1.partition

2.stable_partition

3.nth_element

4.partial_sort

5.sort

6.stable_sort

下面我们来讲一下他们的区别所在。

一、partition算法可以把满足特定条件的元素放在区间的前部,并且返回一个迭代器,指向第一个不满足条件的元素。

 

例如:我们要找出一个班级中成绩大于60分的学生,那么我们应该这样做。

bool IsPass(int a)

{

     return a>=60;

}

vector<int>::iterator Pass = partition(record.begin(),record.end(),IsPass);

在此调用后,所有分数大于60分的学生都被放在record.begin()到Pass之间,而分数小于60分的学生都被放在Pass到record.end()之间。

二、但是如果我们想在partition的排序过程中,保持相同元素的相对位置,那么我们就应该使用stable_partition.

比如,学生A和学生B的成绩相同,而且学生B在原来元素中的位置比学生A靠前。

如果用partition进行排序,排序后学生A和学生B的位置就存在了不确定性,但是如果用stable_partition进行排序,那么就保持了相同元素的相对位置,也就是学生B仍然在学生A的前面。

三、假设我要取一个班级里面排名前20名的学生,并且对前20名的学生进行排序。那么用sort是比较浪费时间的。sort是对所有的学生进行排序,而我们需要的只是对前20名的学生进行排序。那么我们就可以考虑使用partial_sort来进行操作。

partial_sort是一种部分排序的算法,它只取指定条件的前n个元素进行排序。

具体使用方法如下:

bool Compare(int a, int b)

{

    return a>b;

}

partial_sort(record.begin(), record.begin()+20, record.end(), Compare);

四、如果我们只要知道前20名是哪几个人就可以了,而不需要知道他们的顺序。那么我们就可以使用nth_element来解决问题,耗费的时间会少于partial_sort。

nth_element是把符合条件的前n个放在前端。

使用方法如下:

bool Compare(int a, int b)

{

    return a>b;

}

nth_element(record.begin(),record.begin()+19,record.end(),Compare);

要注意的是nth_element的第二个参数指向的是符合条件的最后一个元素。

而partial_sort的第二个参数指向的是符合条件的元素的后一个元素。

当区间元素个数不大于32 时,直接做一次全排序,只有元素个数足够多时,才采用常规的线性复杂度算法。

 

nth_element还有个特殊的用途,就是可以用来查找一个区间的中间值,或者某个特定百分比上的值。

例子如下:

bool Compare(int a, int b)

{

    return a>b;

}

vector<int>::iterator Pos;

//查找区间中成绩处在20%的元素。

Pos = record.begin() + record.size()*0.2;

nth_element(record.begin(), Pos, record.end(), Compair);

Pos指向的就是成绩处在20%的元素。

五、sort是我们最常用的排序算法,但是大家是否知道它的一个重要特性?

也就是当碰到几个相同元素的时候,sort 是如何处理他们的。

事实上,sort如果碰到几个相同的元素,为了提高算法的速度,就没有保持相同元素的相对位置。

但是有时候,保持相同文件的相对位置对我们至关重要,那么我们就需要考虑用其他的排序算法来实现了。

六、stable_sort就满足了我们上面所提的要求。它在排序的过程中可以保持相同元素的相对位置。这在某些情况下还是必须的。

STl中的排序算法详细解析 全排序即把所给定范围所有的元素按照大小关系顺序排列。sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法) 立即下载

相关推荐

ANSYS接触分析实战:从法兰连接案例看接触刚度与穿透容差的黄金搭配

本文以法兰连接为实战案例,深入解析了ANSYS接触分析中接触刚度(FKN)与穿透容差(FTOLN)的参数设置策略。通过系统性敏感性分析,揭示了这对关键参数的博弈关系与调优逻辑,旨在帮助工程师在保证计算收敛的同时,获得高精度的有限元分析结果,有效解决工程中的非线性接触难题。

moon9的博客 314

partial_sort()和nth_element() 两个和排序有关的函数的性能问题

Partial_sort() 的作用是只对前面部分元素进行排序,而不进行全排序。 nth_elment()的作用是把第n个元素放在这个序列的第n位置上,同时保证1-n-1个元素比n小,n+1-end的元素比n要大,有一个划分的作用。   按照两个函数的设计目的,Partial_sort()要比nth_element()慢。 但是在VS和G++上做了性能测试,测试的结果都是后者要比前者慢,而

train的专栏 2533

实战Nocobase插件开发:如何用yarn pm命令快速创建和测试API接口插件

本文详细介绍了如何使用Nocobase插件开发工具快速创建和测试API接口插件,涵盖从环境配置、插件骨架生成到数据模型定义和接口实现的完整流程。通过yarn pm命令简化开发步骤,帮助开发者高效构建支持CRUD的API插件,适用于低代码平台开发场景。

weixin_29313239的博客 457

STL常用算法——排序算法

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

万里顾一程的博客 1941

ROS2中间件选型指南:FastDDS与CycloneDDS零拷贝机制对比与实战

在机器人开发中,通信中间件是连接分布式节点的核心纽带,其性能直接影响系统的实时性与可靠性。DDS作为ROS2默认的通信标准,通过发布订阅模型和QoS策略,为高频大带宽场景提供了灵活的数据分发能力。并行计算与高性能传输的需求,推动了零拷贝技术的演进——从传统序列化到共享内存乃至指针传递,旨在减少数据复制开销、降低延迟。在激光雷达点云、相机图像等场景下,中间件的选型尤为关键。FastDDS凭借与ROS2的深度集成和丰富文档成为入门首选,而CycloneDDS在低延迟和资源占用上表现更优,借助iceoryx实现了

weixin_28726391的博客 261

金蝶云星空应用开发初级考试题目汇总

摘要:本文为金蝶云星空应用开发初级考试题目汇总

2401_86113757的博客 3799

STL学习-排序算法

在上面的结果中stable_sort(稳定的排序)反而最快。按照书上的理论sort使用快速排序应该最快,其次是partial_sort使用堆排序,最慢的是stable_sort排序。没有特殊要求的一般情况请使用sort,如果需要稳定的排序请使用stable_sort。使用堆排序,平均性能和最差都是O(nlogn),但实际情况比sort慢。第二个参数:堆排序结束迭代器,它距离第一个参数的距离就是得到有序数据的个数。稳定的排序,采用的是归并排序,O(logn),但是空间复杂度大。第一个参数:开始迭代器。

hxd030228的博客 562

基于YOLOv10深度学习的花生种子霉变检测系统

YOLO(You Only Look Once)是当前最先进的目标检测算法之一,具有快速、精准的特性。YOLOv10是YOLO系列的最新版本,相较于之前的版本,YOLOv10在特征提取、模型精度和速度上都有了显著的提升。YOLOv10采用了更深的卷积神经网络、更多的跨层特征融合方法,使得其在不同尺寸物体的检测和复杂场景的处理上都表现出了优异的性能。YOLOv10特别适合应用在需要快速处理并检测大量图像的任务中,如花生种子霉变检测等,能够实现精准、高效的检测。

2201_76125393的博客 649

STL 中排序相关算法总结

STL 中排序相关算法总结

编程猿来如此 709

社交媒体文章内容与评论抓取:Python 爬虫实战教程

通过本文的介绍,我们学习了如何使用 Python 编写爬虫,抓取社交媒体平台的文章内容和评论。我们详细介绍了如何使用requestsSelenium和Tweepy等工具,抓取微博和 Twitter 上的公开数据。同时,我们还讨论了如何处理反爬虫机制,避免账号或 IP 被封禁。抓取社交媒体数据是一个充满挑战和乐趣的过程,掌握这些技术后,你可以在大数据分析、情感分析和舆情监测等方面得到更深层次的应用。

2201_76125261的博客 1711

大模型微调部署实战及类GPT工具的高效使用

本文主要介绍了专栏《大模型微调部署实战及类GPT工具的高效使用》的核心内容,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 专栏亮点 3. 你的收获 4. 详细目录

herosunly的博客 22万+

STL中常用的排序算法

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

一路向北 753

基于Simulink的间接功率控制的矩阵变换器

通过上述步骤,我们成功设计并实现了基于 Simulink 的间接功率控制的矩阵变换器仿真模型。该模型能够通过控制输入电流和输出电压,实现对功率的间接控制,适用于电机驱动、可再生能源系统、电力传输等领域。通过虚拟场景仿真、参数优化和性能评估,验证了系统的稳定性和高效性,并通过调整 PI 控制器参数和优化调制算法,进一步提升了系统的性能。

MHD0815的博客 296

stl,vector, list,双向链表,map

下列关于stl的说法正确的是()   A,map的迭代器的key是const类型,无法对其进行修改   B,list是双向链表实现,插入元素的复杂度是O(1)   C,vector的大小会增大或者减少,但容量只会增大而不会减少   D,stl的排序算法一般比较传统的快速排序块是因为其选取中值的算法好

L未若的博客 4427

Statistics and Machine Learning Toolbox

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

stl排序

0 前言: STL,为什么你必须掌握   对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已

smz436487的专栏 388

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

STL排序算法介绍

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

Sean 583

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

对vector等STL标准容器进行排序操作

西方有句谚语:不要重复发明轮子! STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。 排序是最广泛的算法之一,本文详细介绍了STL中不同排序算法的用法和区别。 1 STL提供的Sort 算法 C++之所以得到这么多人...

韩江雪de 小屋 1003

详细解说 STL 排序(Sort)

详细解说 STL 排序(Sort) 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sort 的稳定

博命生涯 900

STL中的sort函数

STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已不用拘泥于算法本身,从而站在巨人的肩膀上去考虑更高级的应用。 排序是最广泛的算法之一,本文详细介绍了STL中不同排序算法的用法和区别。 1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具

ChenMeJn's blog 706

整理:STL sort排序算法详细介绍

一切复杂的排序操作,都可以通过STL方便实现 ! 0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会发现

一苇以航 4767

STL相关知识点

主要介绍STL中容器的相关知识点

weixin_51927889的博客 896

STL的sort算法

详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握1 STL提供的Sort 算法 1.1 所有sort算法介绍1.2 sort 中的比较函数1.3 sort 的稳定性1.4 全排序1.5 局部排序1.6 nth_element 指定元素排序1.7 partition 和stable_partition 2 Sort 和容器3 选择合适的排序函数4 小结5 参考文

messiran10的专栏 518

STL排序

0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论 都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会 发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟

坤哥的专栏 643

STL 排序(Sort)

 STL 排序(Sort) 网上看到这篇文章,觉得写得比较易懂,转过来收藏!! 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数

wuzoujing的专栏 989
上一篇: 完全自己写的一个Dijkstra函数
下一篇: C++ 算法(STL)
cclsoft
博客等级 码龄19年 39粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值