【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

目录
相关文章
|
9天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
29 4
2023/11/10学习记录-C/C++对称分组加密DES
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
103 80
|
21天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
7天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。