【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

目录
相关文章
|
2月前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
108 10
|
2月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
74 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
67 1
|
2月前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)
|
2月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
24 1
|
2月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
27 0
|
2月前
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
2月前
|
人工智能 算法 Java
【搜索算法】数字游戏(C/C++)
【搜索算法】数字游戏(C/C++)
|
7天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。