【C++常用算法】STL基础语法学习 | 排序算法

简介: 对容器内元素进行排序

●sort


1.功能描述:


       对容器内元素进行排序


2.查看sort定义下底层代码的函数原型:

2bcd2fddda02942f17fdc9f086b5dcc4_b9dca121893a4170a26509ae56fb2071.png

3.向vector容器中插入10个无序数,并且用sort排序法对其进行升序和降序(内建仿函数greater<数据类型>())的排序。

001af3b36eedae0aa205a3ef2bb884e0_c6ac90fb86c14c07b4abfb687663a70d.png

greater<数据类型>()

#include<iostream>
#include<vector>
#include<algorithm>  //算法头文件 
#include<functional>  //内建仿函数头文件
using namespace std;
void printvector(int value)
{
  cout << value << " ";
}
void text()
{
  vector<int>v;
  int n;
  cout << "请向vector容器中插入10个无序数:";
  for (int i = 1; i <= 10; i++)
  {
  cin >> n;
  v.push_back(n);
  }
  cout << "sort的升序排序" << endl;
  sort(v.begin(),v.end());
  for_each(v.begin(), v.end(),printvector);
  cout << endl;
  cout << "sort的降序排序" << endl;
  sort(v.begin(), v.end(), greater<int>()); 
  for_each(v.begin(),v.end(),printvector);
}
int main()
{
  text();
}

bdf6ad7566efdf316a612e5b434c67a8_5ef7e4579b694ecfa6d250f89dbbe85d.png


●random_shuffle


1.功能描述:


       对指定范围内的元素去随机调整顺序


2.查看random_shuffle定义下底层代码的函数原型:


e62dce6eda9a85d7c737e7c5bd143991_6c536a78a2e14decadd32ddbfeee807b.png

3.向vector容器中插入10个顺序数,用rand_shuffle洗牌算法将这10个顺序数打乱输出。


#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printvector(int value)
{
  cout << value << " ";
}
void text()
{
  vector<int>v;
  int n;
  cout << "请向vector容器中插入10个顺序数:";
  for (int i = 1; i <= 10; i++)
  {
  cin >> n;
  v.push_back(n);
  }
  cout << "输出这10个顺序数:";
  for_each(v.begin(),v.end(),printvector);
  cout << endl;
  cout << "输出调整乱序后的10个数:";
  random_shuffle(v.begin(), v.end());
  for_each(v.begin(), v.end(), printvector);
  cout << endl;
}
int main()
{
  text();
}

9b26c267f563da40910b9966a19604ee_ad8188ebb41149e8bfc82cc4dab4b1b1.png


● merge


1.功能描述:


       两个有序容器的合并,并且存储到另一指定容器中,合并后指定容器中的序列也是有序的


2.查看merge定义下底层代码的函数原型:

b6d12257a11fa41c315d6559fccf13e7_ad1788fa72e74cc386ce6e7bf072861a.png

3.向v1容器中插入1~10,v2容器中插入11~20。将两容器使用merge算法合并到指定容器v中并输出。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printvector(int value)
{
  cout << value << " ";
}
void text()
{
  vector<int>v1;
  vector<int>v2;
  for (int k = 1,i=1,j=11; k <= 10; k++,i++,j++)
  {
  v1.push_back(i);
  v2.push_back(j);
  }
  //1 2 3 4 5 6 7 8 9 10  [v1]
  //11 12 13 14 15 16 17 18 19 20  [v2]
  cout << "输出v1容器:";
  for_each(v1.begin(), v1.end(), printvector);
  cout << endl;
  cout << "输出v2容器:";
  for_each(v2.begin(), v2.end(), printvector);
  cout << endl;
  cout << "两容器合并后,指定容器v为:" << endl;
  vector<int>v;  //指定容器
  v.resize(v1.size()+v2.size());  //给指定容器一个空间大小
  merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v.begin());
  for_each(v.begin(), v.end(), printvector);
}
int main()
{
  text();
}

7897c544e9f73d1e91267e7c0f05bd8e_84697b627d93462f828c5abd62ddec06.png


●reverse


1.功能描述:


       将容器内元素进行反转


2.查看reverse定义下底层代码的函数原型:

d7e4cb71f959940ba768adb881adf4c3_3041e814146243caa5a55ac573c22a6a.png

3.使用reverse算法去反转v1容器中1~9到v2容器中并输出。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void printvector(int value)
{
  cout << value << " ";
}
void text()
{ 
  vector<int>v;
  for (int i = 1; i <= 10; i++)
  {
  v.push_back(i);
  }
  cout << "反转前:" << endl;
  for_each(v.begin(),v.end(),printvector);
  cout << endl;
  cout << "反转后:" << endl;
  reverse(v.begin(), v.end());
  for_each(v.begin(), v.end(), printvector);
}
int main()
{
  text();
}

b5c8a5fa328a1bf81cc1efa04d875158_3d83a9d84f6c49eabd6e8f85af2e0b2d.png

目录
相关文章
|
6月前
|
存储 编译器 开发工具
01.C++基础语法
本教程系统讲解C++基础语法,涵盖语言特性、编译器使用、命名空间、头文件、修饰符与关键字等核心内容,助你快速掌握C++编程基础。
367 9
|
6月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
7月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
320 1
|
8月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
241 0
|
9月前
|
存储 搜索推荐 算法
加密算法、排序算法、字符串处理及搜索算法详解
本文涵盖四大类核心技术知识。加密算法部分介绍了对称加密(如 AES)、非对称加密(如 RSA)、哈希摘要(如 SHA-2)、签名算法的特点及密码存储方案(加盐、BCrypt 等)。 排序算法部分分类讲解了比较排序(冒泡、选择、插入、归并、快排、堆排序)和非比较排序(计数、桶、基数排序)的时间复杂度、适用场景及实现思路,强调混合排序的工业应用。 字符串处理部分包括字符串反转的双指针法,及项目中用正则进行表单校验、网页爬取、日志处理的实例。 搜索算法部分详解了二分查找的实现(双指针与中间索引计算)和回溯算法的概念(递归 + 剪枝),以 N 皇后问题为例说明回溯应用。内容全面覆盖算法原理与实践
262 0
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
345 2
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
697 73
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
存储 算法 C++
【c++丨STL】set/multiset的使用
本文深入解析了STL中的`set`和`multiset`容器,二者均为关联式容器,底层基于红黑树实现。`set`支持唯一性元素存储并自动排序,适用于高效查找场景;`multiset`允许重复元素。两者均具备O(logN)的插入、删除与查找复杂度。文章详细介绍了构造函数、迭代器、容量接口、增删操作(如`insert`、`erase`)、查找统计(如`find`、`count`)及`multiset`特有的区间操作(如`lower_bound`、`upper_bound`、`equal_range`)。最后预告了`map`容器的学习,其作为键值对存储的关联式容器,同样基于红黑树,具有高效操作特性。
571 3
下一篇
开通oss服务