STL --- 四、算法 Algorithms_c++ algorithms-程序员宅基地

技术标签: 算法  c++  STL  排序算法  

目录

1、Algorithms算法的概述和分类

2、Algorithms 常用算法的介绍和使用

3、Algorithms 算法的时间复杂度和空间复杂度


1、Algorithms算法的概述和分类

算法是C++ STL(标准模板库)中的算法库,提供了大量的算法函数,可用于各种容器(如数组、向量、列表、集合等)的操作。这些算法函数可以大大简化程序员的编程工作,同时提高代码的可读性和可维护性。

算法可以被分为以下几类:

(1)排序算法:排序算法是将一组数据按照某种规则进行排序的算法。常见的排序算法有冒泡排序、选择排序、插入排序、归并排序、快速排序等。

(2)查找算法:查找算法是在一个数据集合中查找某个特定的元素的算法。常见的查找算法有线性查找、二分查找、哈希查找等。

(3)图算法:图算法是指在图结构中解决问题的算法。常见的图算法有最短路径算法、最小生成树算法、拓扑排序算法等。

(4)动态规划算法:动态规划算法是一种解决多阶段决策问题的算法。常见的动态规划算法有背包问题、最长公共子序列问题等。

(5)分治算法:分治算法是一种将问题分解成小的子问题,然后递归地解决这些子问题的算法。常见的分治算法有归并排序、快速排序等。

(6)贪心算法:贪心算法是一种通过贪心的方式来解决问题的算法。贪心算法通常会作出当下最优的选择,而不考虑对未来可能产生的影响。常见的贪心算法有最小生成树算法、背包问题等。

(7)回溯算法:回溯算法是一种通过回溯的方式来解决问题的算法。回溯算法通常会穷举所有的解空间,然后找到符合要求的解。常见的回溯算法有八皇后问题、数独问题等。

2、Algorithms 常用算法的介绍和使用

(1)常用算法:

#include <algorithm>

1. sort:对一个序列进行排序
2. find:在一个序列中查找指定元素
3. count:统计一个序列中某个元素的个数
4. max_element:找到一个序列中的最大元素
5. min_element:找到一个序列中的最小元素
6. accumulate:对一个序列中的元素进行累加
7. reverse:将一个序列进行反转
8. unique:将一个序列中的重复元素去重
9. fill:将一个序列中的所有元素设置为指定值
10. copy:将一个序列中的元素复制到另一个序列中
11. transform:对一个序列中的元素进行转换后,存储到另一个序列中
12. binary_search:在一个有序序列中查找指定元素
13. next_permutation:生成一个序列的下一个排列
14. prev_permutation:生成一个序列的上一个排列
15. partition:将一个序列分割成满足条件的两个部分

(2)使用STL Algorithms的步骤如下:

(1)引入头文件 #include <algorithm>
(2)调用相应的算法函数,例如sort()。
(3)将要排序的容器作为算法函数的参数。
(4)可以使用lambda表达式自定义排序规则。

例如,使用sort()函数对一个vector进行排序:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int> nums = {9, 2, 7, 4, 5};
    sort(nums.begin(), nums.end());
    for(int i = 0; i < nums.size(); i++)
    {
        cout << nums[i] << " ";
    }
    return 0;
}

输出结果为:2 4 5 7 9。

以上述代码为例,我们使用了sort()函数对vector进行排序,sort()函数的参数是容器的begin()和end()迭代器,表示要排序的范围。最后,我们使用for循环遍历vector并输出排序后的结果。

3、Algorithms 算法的时间复杂度和空间复杂度

(1)时间复杂度(Time Complexity)是指算法执行所需要的时间,通常用算法的输入规模 n 表示,记为 T(n)。常见的时间复杂度包括 O(1)、O(logn)、O(n)、O(nlogn)、O(n²) 等,表示算法执行时间随着输入规模的增加而增加的程度。

(2)空间复杂度(Space Complexity)是指算法执行所需要的内存空间,也通常用输入规模 n 表示,记为 S(n)。常见的空间复杂度包括 O(1)、O(logn)、O(n)、O(nlogn)、O(n²) 等,表示算法执行所需要的内存空间随着输入规模的增加而增加的程度。

在实际编写程序时,时间复杂度和空间复杂度的选择往往需要根据具体问题来确定。对于时间要求比较严格的问题,需要选择时间复杂度较低的算法;对于空间要求比较严格的问题,需要选择空间复杂度较低的算法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bigger_belief/article/details/130863512

智能推荐

JSTL 标签大全详解_jstl标签-程序员宅基地

文章浏览阅读10w+次,点赞124次,收藏539次。(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53311722 冷血之心的博客)关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~目录一、JSTL标签介绍1、什么是JSTL?2、JSTL标签库:3、使用taglib指令导入标签库:4、core标签库常用标签:..._jstl标签

Java调用shell脚本及参数传递_java给shell传数组变量-程序员宅基地

文章浏览阅读2.3k次。Java调用shell脚本及参数传递需求脚本示例执行代码封装工具类最后需求项目需求:由于Python没有提供Http请求的接口,而是以脚本的方式调用,Java需要调用pyhon脚本得到结果返回写入文件,然后Java再读取写入的文件,拿到结果页面展示。坑:这种方式适合单线程模式,不是个多个请求并发,写入的文件是固定的,并发情况下,第一的请求如果读取的是第二次请求的结果,就会有问题。脚本示例Java代码不是直接调用python脚本,而是先调用shell脚本,shell脚本再调用python脚本,Ja_java给shell传数组变量

【R语言(一)】R 和 RStudio的安装与初步使用-程序员宅基地

文章浏览阅读7.9k次,点赞10次,收藏69次。R是一种流行的统计软件和编程语言,用于数据分析和可视化。它是一个开源的软件,拥有庞大的社区支持和丰富的扩展包,可运行在各种操作系统上,如Windows、Mac和Linux。R被广泛应用于数据科学、统计学、机器学习和其他相关领域的研究和实践中。以下是R的一些主要特点:数据分析和可视化:R可以轻松地导入、整理和分析数据,然后将结果以各种方式可视化,如绘制图表、创建热图等。R还提供了许多常见的统计分析方法,如线性回归、ANOVA、聚类分析等。编程语言:R是一种完整的编程语言,具有各种编程结构和数据类型。_rstudio

VB6-该部件的许可证信息没有找到的解决方法_vb licenses-程序员宅基地

文章浏览阅读9.2k次。VB6添加控件时提示 该部件的许可证信息没有找到,将以下文件保存为注册表文件并导入Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses] @="Licensing: Copying the keys may be a violation of established copyrights._vb licenses

android agentweb进度,AgentWeb-Android-H5混合开发-程序员宅基地

文章浏览阅读301次。简介agentweb 是对webview进行的又一层封装较为轻量级所以基本的开发流程大致和webview原理相似将html5文件方入asset文件夹下,访问路径为final private String CoachFile = "file:///android_asset/teacher/info-teacher.html";运行demo此demo使用了bintray/Jcenter 这个东西Jc..._agentweb token

【Phone ECC】紧急号码的管理及客制化方法_sim卡 ecclist-程序员宅基地

文章浏览阅读614次。[Android Version]Android 5.0/5.1 (L)Android 6.0 (M)Android 7.0(N)Android 8.0(O)[DESCRIPTION]L及之后的版本紧急号码Customer的部分改成了在XML文件中来配置,文件的路径: alps\vendor\mediatek\proprietary\external\EccL..._sim卡 ecclist

随便推点

FFMPEG 最简滤镜filter使用实例(实现视频缩放,裁剪,水印等)_filters_descr-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏20次。FFMPEG官网给出了FFMPEG 滤镜使用的实例,它是将视频中的像素点替换成字符,然后从终端输出。我在该实例的基础上稍微的做了修改,使它能够保存滤镜处理过后的文件。在上代码之前先明白几个概念: Filter:代表单个filter FilterPad:代表一个filter的输入或输出端口,每个filter都可以有多个输入和多个输出,只有输出pad的filter称为source_filters_descr

C++ vector容器的常用用法_c++ vector修改数据可以直接赋值吗-程序员宅基地

文章浏览阅读7.6k次,点赞23次,收藏93次。vector可以说是一个动态数组,它可以存储任何类型的数据,包括类!使用vector需包含头文件#include< vector >.定义一、不带参数// 定义了一个int类型的容器vector<int> v1;// 定义了一个double类型的容器vector<double> v2;注意事项:容器可以使用数组方式获取它的值 和 给它赋..._c++ vector修改数据可以直接赋值吗

万字长文,深度解析SpringMVC 源码,让你醍醐灌顶!!-程序员宅基地

文章浏览阅读4.1k次,点赞11次,收藏92次。文末可以领取所有系列高清 pdf。大家好,我是路人,这是 SpringMVC 系列第 16 篇。本文将通过阅读源码的方式带大家了解 springmvc 处理请求的完整流程,干货满满。目录1..._springmvc源码分析

kdump核心崩溃信息存储到SSH服务器-程序员宅基地

文章浏览阅读752次。1、配置测试机和SSH服务器之间的免密钥登录:测试机生成密钥#ssh-keygen -t rsa将/root/.ssh/id_rsa.pub中的内容拷贝到SSH服务器的/root/.ssh/authorized_keys文件中,并修改文件权限为600;2.、编辑测试机的/etc/kdump.conf,注释其他内容,并在文件末尾添加:ssh [email protected] sshkey /root/.ssh/id_rsa path /sshkdump core_collect_核心崩溃信息存储到ssh服务器

java财务对账系统设计_对账系统设计-程序员宅基地

文章浏览阅读1.4k次。更多支付内容请移步个人站:YKBLog.top对账整体设计从整体来看,按照时序维度的先后,系统对账主要分为三阶段的工作。分别是数据准备、数据核对和差错处理。数据准备细分一下,又分为文件获取、文件解析、数据清洗。在对账专业概念中,数据核对和差错处理又叫轧账和平账。具体设计脑图如下:check-arch.png对账各个模块设计数据准备数据准备,顾名思义,我们需要把对账所需的全部数据,接入到我们的对账系..._java 对账实战思路

Python新姿势:用魔法方法玩转对象-程序员宅基地

文章浏览阅读887次,点赞23次,收藏17次。Python中魔法方法(magic method)其实就是那些被双下划线包围的方法,比如__init____str__等等。这些魔法方法为类添加了**“魔力”,让我们可以在面向对象编程中用更加简洁的代码来操作对象。本篇根据面向对象编程的一些场景来介绍常用的魔法方法**。Python的魔法方法很多,本文只是列举了其中很少的一部分,github上有一个示例python。

推荐文章

热门文章

相关标签