STL 中排序相关算法总结

2023-11-08

sort

①.头文件

sort 算法定义在头文件 #include 中。

②.算法作用

sort 算法是基于快速排序实现的,默认对指定范围内的元素进行升序排列。

③.使用条件

使用 sort 进行排序到容器必须支持随机访问,默认使用 < 运算符进行比较,也可以提供自定义比较函数。

④.代码示例

vector<int> vec = { 6,4,3,1,2,9,5,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
sort(vec.begin(), vec.end());

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

stable_sort

①.头文件

stable_sort 算法定义在头文件 #include 中。

②.算法作用

stable_sort 算法是基于归并排序实现的,默认对指定范围内的元素进行升序排列,并且可以保证相同元素的相对位置不变。

③.使用条件

使用 stable_sort 进行排序到容器必须支持随机访问,默认使用 < 运算符进行比较,也可以提供自定义比较函数。

④.代码示例

vector<int> vec = { 6,4,3,1,2,9,5,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
stable_sort(vec.begin(), vec.end());

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

partial_sort

①.头文件

partial_sort 算法定义在头文件 #include 中。

②.算法作用

partial_sort 算法是部分排序,默认升序排列,即把最新的 n 个元素排到开头。

③.使用条件

使用 partial_sort 进行排序到容器必须支持随机访问,默认使用 < 运算符进行比较,也可以提供自定义比较函数。

④.代码示例

vector<int> vec = { 6,4,3,1,2,9,5,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
partial_sort(vec.begin(),vec.begin()+5, vec.end());

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

T

partial_sort_copy

①.头文件

partial_sort_copy 算法定义在头文件 #include 中。

②.算法作用

partial_sort_copy 算法是部分排序后把结果拷贝到另外一个容器中,默认升序排列,即获取排序后到前 n 个元素。

③.使用条件

使用 partial_sort_copy 进行排序到容器必须支持随机访问,默认使用 < 运算符进行比较,也可以提供自定义比较函数。

④.代码示例

vector<int> vec = { 6,4,3,1,2,9,5,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
vector<int> vec2(5);
partial_sort_copy(vec.begin(), vec.end(),vec2.begin(),vec2.end());

cout << endl << "排序后:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

nth_element

①.头文件

nth_element 算法定义在头文件 #include 中。

②.算法作用

nth_element 算法排序后得到的结果是,第 n 个位置前的元素都不大于 n 处的元素值,第 n 个位置后的元素值都不小于 n 处的元素值。

③.使用条件

使用 nth_element 进行排序到容器必须支持随机访问,默认使用 < 运算符进行比较,也可以提供自定义比较函数。

④.代码示例

vector<int> vec = { 3,4,1,2,5,9,6,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
    
nth_element(vec.begin(), vec.begin()+4, vec.end());

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

partition

①.头文件

partition 算法定义在头文件 #include 中。

②.算法作用

nth_element 算法排序后得到的结果是,满足条件到元素排在不满足条件到元素前面。

③.使用条件

使用 partition 进行排序到容器必须支持随机访问,默认使用 < 运算符进行比较,也可以提供自定义比较函数。

④.代码示例

vector<int> vec = { 3,4,1,2,5,9,6,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
partition(vec.begin(), vec.end(), [&](int i) {return  i > 4; });

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

random_shuffle

①.头文件

random_shuffle 算法定义在头文件 #include 中。

②.算法作用

random_shuffle 算法的作用是随机打乱原来序列的顺序,默认采用 rand 作为随机数生成器。

③.代码示例

srand(time(nullptr));
vector<int> vec = { 3,4,1,2,5,9,6,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
random_shuffle(vec.begin(), vec.end());

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

shuffle

①.头文件

shuffle 算法定义在头文件 #include 中。

②.算法作用

shuffle 算法的作用是随机打乱原来序列的顺序,第三个参数是传入一个随机数生成器

③.代码示例

vector<int> vec = { 3,4,1,2,5,9,6,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
mt19937 gen(random_device{}());
shuffle(vec.begin(), vec.end(),gen);

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

reverse

①.头文件

reverse 算法定义在头文件 #include 中。

②.算法作用

reverse 算法的作用是对指定范围的序列进行反转操作。

③.代码示例

vector<int> vec = { 3,4,1,2,5,9,6,7,8 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
reverse(vec.begin(), vec.end());

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

rotate

①.头文件

rotate 算法定义在头文件 #include 中。

②.算法作用

rotate 算法的执行结果是把指定位置 n 开始的区间排列到序列前面。

③.代码示例

vector<int> vec = { 1,2,3,4,5,6,7,8,9 };
cout << "原序列:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });
  
rotate(vec.begin(), vec.begin()+3, vec.end());

cout << endl << "排序后:" << endl;
for_each(vec.begin(), vec.end(), [](int i) { cout << i << ","; });

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL 中排序相关算法总结 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • 论文快速回顾笔记 —— Supressing Uncertainties for Large-Scale FER

    前言 这是之前因为做项目而读过的一篇CVPR2020论文 有些细节还是挺有意思的 最近回顾一下 顺便做下笔记 以供后续查阅 Paper Suppressing Uncertainties for Large Scale Facial Exp
  • Uni-App开发BLE低功耗蓝牙流程

    Uni App开发BLE低功耗蓝牙步骤 示例文件已上传gitee https gitee com yan rookie uniapp bluetooth git 如果对你有记得点个赞哦 注 微信小程序同样适用 只需吧前缀uni 修改为wx
  • 两个链式存储的一元多项式乘法运算算法

    include
  • 面试官:说说Node中的EventEmitter? 如何实现一个EventEmitter?

    一 是什么 我们了解到 Node采用了事件驱动机制 而EventEmitter就是Node实现事件驱动的基础 在EventEmitter的基础上 Node几乎所有的模块都继承了这个类 这些模块拥有了自己的事件 可以绑定 触发监听器 实现了异
  • 电赛知识补充——电机篇

    在准备电赛的时候 我通常会发现手边有很多格式各样的电机 问了很多人都没能和我说明白这些个电机是什么 有什么特性 怎么驱动 所以我打算学习一下电机的分类 本文主要记录了在电赛中所需要的电机相关知识 包括电机的种类 特点 驱动方式等等 今后不定
  • windows7 64位机上安装配置CUDA 9.1+cudnn7操作步骤

    版权声明 本文为CSDN博主 陌筱北 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net moxiaobeiMM article details 84529
  • vue项目整合codemirror代码编辑器

    需求 需要在web页面中整合一个sql的编辑器 选择了codemirror 以下被我封装成了组件 项目里改一改就可以直接用 codemirror支持很多语言 但我只需要使用sql编辑器 所以做了精简 安装使用步骤 1 安装 npm i co
  • 【经典】MySQL绿色安装

    第一步 下载Mysql 官网下载地址 https dev mysql com downloads mysql 1 鼠标滑下来 找到Other Download中的 Windows x86 64 bit ZIP Archive 点击其右边的D
  • 真实图形学(光照模型)

    一 颜色模型 真实感图形学 简单地说 就是希望用计算机生成像照相机拍的照片一样逼真的图形图像 要实现这个目标 需要三部曲 第一步 建立三维场景 建模 第二步 消隐解决物体深度的显示及确定物体之内的相互关系 第三步 在解决了消隐问题之后 在可
  • 机器学习模型常用评价指标(Accuracy, Precision, Recall、F1-score、MSE、RMSE、MAE、R方)

    前言 众所周知 机器学习分类模型常用评价指标有Accuracy Precision Recall和F1 score 而回归模型最常用指标有MAE和RMSE 但是我们真正了解这些评价指标的意义吗 在具体场景 如不均衡多分类 中到底应该以哪种指
  • 使用RocketMQ如何保证消息顺序

    RocketMQ 的顺序问题分为 全局有序和局部有序 全局有序 整个 RocketMQ 系统的所有消息严格按照队列先入先出顺序进行消费 局部有序 只保证一部分关键消息的消费顺序 在通常的业务场景中 我们只需要能够保证局部有序就可以了 电商订
  • Unity 接入Facebook。登录、分享、邀请、好友列表等功能。详细记录

    本文现已搬迁至 https blog csdn net NRatel article details 84241100 此博客废弃 我的新CSDN账号 https blog csdn net NRatel
  • 微云不限速下载

    既然将百度网盘有不限速的下载 那么腾讯也有 现在分享给大家 这里以PC端为例 准备工具 微云客户端 QQ 将文件保存到自己的微云上 打开QQ随便找个好友或者给自己发消息 直接发到我的设备也可以 然后鼠标放到文件夹的图标 选择微云文件 然后直
  • element-ui的表格超出部分显示省略号

    前言 element ui的表格超出部分显示省略号 这里实际是官方有提供的属性 show overflow tooltip 使用 注意在哪一行需要显示省略号 就给那个表头加 官方api Table Attributes 参数 说明 类型 可
  • 天梯赛习题集 L 1 - 016 查验身份证 (15 分)

    一个合法的身份证号码由17位地区 日期编号和顺序编号加1位校验码组成 校验码的计算规则如下 首先对前17位数字加权求和 权重分配为 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 然后将计算的和对11取模得到值Z 最
  • Uabntu 17.04+python2.7 +anaconda2

    Uabntu 17 04 python2 7 anaconda2 python 2 7 安裝 安裝外部庫 網絡問題 安裝 pip apt get Anacoda2 使用 電腦白癡的ubantu python之路 python 2 7 安裝
  • 在linux里rm 命令怎么删除多个文件

    dilantaya 说 请问在linux里rm 命令怎么删除多个文件 比如 大量的 2010 10 xx log 和 2010 09 xx log 文件 用rm命令怎么一起给删除了 谢谢 chenyx 说 用 代替xx就能删除了 例如 rm
  • cmake使用TOOLCHAIN进行交叉编译

    cmake DCMAKE TOOLCHAIN FILE toolchain RK3399 cmake CMAKE INSTALL PREFIX usr local rk3399mpp 创建toolchain RK3399 cmake文件 c
  • View事件分发相关面试题

    1 View事件分发机制 对屏幕的点击 滑动 抬起等一系的动作都是由一个一个MotionEvent对象组成的 根据不同动作 主要有以下三种事件类型 ACTION DOWN 手指刚接触屏幕 按下去的那一瞬间产生该事件 ACTION MOVE
  • STL 中排序相关算法总结

    sort 头文件 sort 算法定义在头文件 include 中 算法作用 sort 算法是基于快速排序实现的 默认对指定范围内的元素进行升序排列 使用条件 使用 sort 进行排序到容器必须支持随机访问 默认使用 lt 运算符进行比较 也