C++ 常用排序算法

ops/2025/2/5 4:39:03/

排序算法

算法简介

sort // 对容器内元素进行排序
random_shuffle // 洗牌 指定范围内的元素随机调整次序
merge // 容器元素合并, 并存储到另一容器中
reverse // 反转指定范围内的元素

1. sort

功能:对容器内部分区间按某种规则进行排序

函数原型:

sort(iterator beg, iterator end, _Pr) 
按规则对区间[beg, end)内的元素进行排序
beg 区间开始迭代器
end 区间结束迭代器
_Pr 谓词
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// sort void myPrint(int val){cout << val << " ";
}void test01()
{vector<int> v;v.push_back(80);v.push_back(20);v.push_back(60);v.push_back(40);v.push_back(50);// 默认排序规则为从小到大,进行降序排序sort(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint);cout << endl;// 降序sort(v.begin(), v.end(), greater<int>());for_each(v.begin(), v.end(), myPrint);cout << endl;
}int main(int argc, char const *argv[])
{test01();return 0;
}

2. random_shuffle

功能: 对容器中的元素进行随机打乱

函数原型:
random_shuffle(iterator start, iterator end, random number generator)

参数说明:
start:容器的起始迭代器
end:容器的结束迭代器
random number generator:随机数产生器

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// random_shufflevoid myPrint(int val){cout << val << " ";
}void test01()
{// 随机数种子srand((unsigned int)time(NULL));vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}// 打乱顺序random_shuffle(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint);cout << endl;
}int main(int argc, char const *argv[])
{test01();return 0;
}

3. merge

功能: 两个容器元素合并,并存储到另一容器中

注意: 两个容器必须是有序的

函数原型:
merge(iterator first1, iterator last1, iterator first2, iterator last2, iterator result)

参数说明:
first1 第一个容器的开始迭代器
last1 第一个容器的结束迭代器
first2 第二个容器的开始迭代器
last2 第二个容器的结束迭代器
result 合并之后的容器的开始迭代器

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// mergevoid myPrint(int val){cout << val << " ";
}void test01()
{vector<int> v1;for (int i = 0; i < 10; i++){v1.push_back(i);}vector<int> v2;for (int i = 0; i < 10; i++){v2.push_back(i);}// 如果不是有序的,则合并后的结果是无序的v2.push_back(1);vector<int> vTarget;// 合并 目标容器需要提前开辟空间vTarget.resize(v1.size() + v2.size());// 合并merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());// 遍历for_each(vTarget.begin(), vTarget.end(), myPrint);cout << endl;//  在排序sort(vTarget.begin(), vTarget.end());for_each(vTarget.begin(), vTarget.end(), myPrint);cout << endl;
}int main(int argc, char const *argv[])
{test01();return 0;
}

4. reverse

功能: 将容器中的元素进行逆置

函数原型:
reverse(iterator first, iterator last);

参数说明:
first:开始迭代器
last:结束迭代器

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// reverse
void myPrint(int val){cout << val << " ";
}void test01()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);for_each(v.begin(), v.end(), myPrint);cout << endl;// 翻转reverse(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint);cout << endl;
}int main(int argc, char const *argv[])
{test01();return 0;
}

http://www.ppmy.cn/ops/155765.html

相关文章

动手学深度学习-卷积神经网络-3填充和步幅

目录 填充 步幅 小结 在上一节的例子&#xff08;下图&#xff09; 中&#xff0c;输入的高度和宽度都为3&#xff0c;卷积核的高度和宽度都为2&#xff0c;生成的输出表征的维数为22。 正如我们在 上一节中所概括的那样&#xff0c;假设输入形状为nhnw&#xff0c;卷积核形…

构建一个运维助手Agent:提升运维效率的实践

在上一篇文章中,我们讨论了如何构建一个研发助手Agent。今天,我想分享另一个实际项目:如何构建一个运维助手Agent。这个项目源于我们一个大型互联网公司的真实需求 - 提升运维效率,保障系统稳定。 从运维痛点说起 记得和运维团队讨论时的场景&#xff1a; 小王&#xff1a;我…

冯诺依曼系统及操作系统

目录 一.冯诺依曼体系结构 二.操作系统 三.系统调用和库函数概念 一.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由一…

AWS EMR使用Apache Kylin快速分析大数据

在AWS Elastic MapReduce&#xff08;EMR&#xff09;集群上部署和使用Apache Kylin&#xff0c;以实现对大规模数据集的快速分析&#xff0c;企业可以充分利用云计算的强大资源和Kylin的数据分析能力&#xff0c;实现快速、高效的数据分析。以下是该案例的详细步骤和要点&…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具03

SQLSERVER的ImpDp和ExpDp工具 1、全部的表导出&#xff08;仅表结构导出&#xff09; 2、导出的表结构&#xff0c;导入到新的数据库 导入前&#xff0c;test3数据没有任何表 导入 导入结果确认&#xff1a;表都被做成&#xff0c;但是没有数据 3、全部的表导出&#x…

MySQL事务详解

MySQL事务详解 概念事务四个特性事务三种运行模式事务保存点事务使用原则数据库读现象事务四种隔离级别 概念 事务(Transaction)&#xff0c;顾名思义就是要做的或所做的事情&#xff0c;数据库事务指的则是作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部执…

LLMs:open-r1(完全-完整-开放式-复现DeepSeek-R1)的简介、安装和使用方法、案例应用之详细攻略

LLMs&#xff1a;open-r1(完全-完整-开放式-复现DeepSeek-R1)的简介、安装和使用方法、案例应用之详细攻略 目录 相关文章 LLMs之MoE之DeepSeek&#xff1a;《DeepSeek-V3 Technical Report》翻译与解读 LLMs之MoE之DeepSeek-V3&#xff1a;DeepSeek-V3的简介、安装和使用方…

sql主从同步

今天给大家介绍两种mysql的主从同步方式&#xff1a;第一种是基于binlogzhu主从同步&#xff1b;第二种就是基于gtid的主从同步方式。 首先给大家介绍一下什么是sql的主从复制。 主从复制&#xff1a; 通过将MySQL的某一台主机&#xff08;master&#xff09;的数据复制到其…