程序员常用的算法(13种)

12.广度优先搜索(Breadth-FirstSearch,BFS)

13.深度优先搜索(Depth-FirstSearch,DFS)

程序员常用的算法包括但不限于以下几种:

1)排序算法:

2)搜索算法:

3)动态规划算法4)贪心算法5)分治算法6)图算法:

下面将对每种算法进行详细讲解,并给出一个实例和对应的C语言实现代码。

结合自己近8年对数据结构的研究,我原创了一整套数据结构和算法教程(xiexuewu.github.io),它通俗易懂、不学院派,没有晦涩难懂的学术用语,教程提供了完整、可运行的C语言程序,非常适合有C语言基础、想系统学习数据结构和算法的人。

冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,如果它们的顺序错误就把它们交换过来。

【示例】假设要排序的数组为:[5,3,8,4,2]

步骤:

第一次遍历:比较相邻的两个元素,如果前面的比后面的大,则交换它们。

[3,5,4,2,8]

第二次遍历:继续比较相邻的两个元素并交换。

[3,4,2,5,8]

继续这个过程,直到没有任何一对数字需要比较。C语言实现代码:

这段代码实现了冒泡排序算法,并对示例数组进行了排序。

选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

第一次遍历:找到最小的元素2,与第一个元素5交换位置。

[2,3,8,4,5]

第二次遍历:在剩余的元素中找到最小的元素3,与第二个元素3交换位置(即自身)。

以此类推,直到所有元素都排好序。

C语言实现代码:

这段代码实现了选择排序算法,并对示例数组进行了排序。

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

第一次遍历:首先将数组的第一个元素视为有序序列,然后依次将后面的元素插入到有序序列中的适当位置。

[3,5,8,4,2]

继续进行这个过程,直到所有元素都插入到正确的位置。C语言实现代码:

这段代码实现了插入排序算法,并对示例数组进行了排序。

快速排序是一种常用的排序算法,它是一种分治的排序方法。它的工作原理是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

这段代码实现了快速排序算法,并对示例数组进行了排序。

归并排序是一种分治算法,它将待排序的数组分成两个子数组,分别对这两个子数组进行排序,然后将排好序的子数组合并成一个最终的排序数组。

这段代码实现了归并排序算法,并对示例数组进行了排序。

堆排序是一种选择排序,它利用了堆这种数据结构的性质。堆是一个完全二叉树,它可以分为最大堆和最小堆。在堆排序中,我们使用最大堆来进行升序排序。

这段代码实现了堆排序算法,并对示例数组进行了排序。

顺序搜索是一种简单直观的搜索算法,也称为线性搜索。它从数组的第一个元素开始逐个检查,直到找到目标元素或遍历完整个数组。

【示例】假设要在数组[5,3,8,4,2]中搜索元素4。

这段代码实现了顺序搜索算法,并在示例数组中搜索元素4。

二分搜索是一种高效的搜索算法,但它要求待搜索的数组必须是有序的。它通过反复将待搜索区间划分为两部分,并在每次迭代中选择与目标元素相比较的中间元素来减小搜索范围。

【示例】假设要在有序数组[2,3,4,5,8]中搜索元素4。

这段代码实现了二分搜索算法,并在有序数组中搜索元素4。

动态规划是一种通过将问题分解成更小的子问题来解决复杂问题的方法,然后将子问题的解组合起来得到原问题的解。它通常用于解决优化问题,例如最长公共子序列、背包问题等。

最长公共子序列问题是指找到两个序列中的最长公共子序列的长度。子序列是可以通过删除某些元素(包括零个)而不改变其余元标题二素相对位置的序列。

【示例】假设有两个序列"ABCBDAB"和"BDCAB",它们的最长公共子序列是"BCAB",长度为4。

动态规划解法:

这段代码实现了动态规划解法,并计算了两个序列的最长公共子序列的长度。

这只是动态规划的一个例子,该技术还可以应用于许多其他类型的问题。

贪心算法是一种优化算法,它在每一步都选择当前状态下的最优解,而不考虑后续步骤可能导致的影响。尽管贪心算法不能保证获得全局最优解,但它通常能够产生一个接近最优解的解。

找零钱问题是一个经典的贪心算法应用场景。假设有一定数量的不同面额的货币,要找零amount元,如何选择最少数量的硬币?

【示例】假设货币的面额为[1,2,5,10,20,50,100],要找零amount=36元。

贪心算法解法:

这段代码实现了贪心算法解决找零钱问题,并计算了找零36元所需的最少硬币数量。

虽然贪心算法在这个问题中得到了最优解,但并不是所有问题都适合贪心算法。在某些情况下,贪心算法可能会产生次优解或甚至无法得到正确解。因此,在应用贪心算法时,需要仔细考虑问题的特性。

分治法是一种将问题分解成更小的子问题来解决复杂问题的方法,然后将子问题的解合并起来得到原问题的解。它通常涉及三个步骤:分解、解决和合并。

归并排序是一种经典的排序算法,它采用分治法的思想。它将待排序的数组分成两个子数组,分别对子数组进行排序,然后将排好序的子数组合并成一个有序数组。

算法步骤:

【示例】考虑待排序数组[38,27,43,3,9,82,10],使用归并排序进行排序。C语言实现代码:

广度优先搜索是一种用于图和树的遍历或搜索的算法。它从指定的起始顶点开始,逐层遍历图或树的节点,直到找到目标节点为止。

示例:

考虑以下无向图:

0--1/\|2---3--4

假设起始顶点为0,目标顶点为4。使用BFS可以找到从顶点0到顶点4的最短路径。

深度优先搜索是一种用于图和树的遍历或搜索的算法。它从指定的起始顶点开始,沿着一条路径尽可能深地访问图的顶点,直到到达最深的顶点,然后回溯并继续遍历其他路径。

假设起始顶点为0,目标顶点为4。使用DFS可以找到从顶点0到顶点4的路径之一。

THE END
1.最强总结,十大机器算法!!作为入门机器学习的同学,很多常用的算法是不是不是很熟悉,没事! 今儿这一篇文章,必然会给大家一个完整的交代~ 点赞、收藏起来,慢慢学习~ 基本的机器学习算法: ·线性回归算发 ·支持向量机算法 ·最近邻居/k-近邻算法 ·逻辑回归算法 ·决策树算法 https://mp.weixin.qq.com/s?__biz=MzI2OTE0ODY5Mw==&mid=2247525985&idx=1&sn=cf011faecac3617cd721a09791cd1da5&chksm=eb8e093e1bfc7026142b9dd8a53980d31da949fb7292dbc425fc5f054948dfd63e7892331949&scene=27
2.最常用的c语言算法有哪些大家知道最常用的c语言算法有哪些吗?下面小编为大家整理了最常用的c语言算法,希望能帮到大家! 一、基本算法 1.交换(两量交换借助第三者) 例1、任意读入两个整数,将二者的值交换后输出。 main() {int a,b,t; scanf("%d%d",&a,&b); printf("%d,%d ",a,b); https://www.oh100.com/kaoshi/c/547898.html
3.罗戈网常用的需求预测算法有哪些?常用的需求预测算法有哪些? 定量分析之时间序列典型算法简介 移动平均法 字面意思了,比如计算5月的预测,可以使用2,3,4三个月的实际值取平均值计算5月的预测值,具体使用几个月的移动平均可以具体产品具体确定了;这种算法适合需求没有明显的季节性波动的产品,可以用这个方法过滤掉随机需求波动;这里假设了所有观测值http://adm3.logclub.com/articleInfo/NTYzMTU=
4.监督学习有哪些常见算法?都是如何应用的监督学习有哪些常见算法?都是如何应用的 掌握一些最常用的监督学习算法能够帮助我们解决实际问题,本文将通过很多实例进行详细介绍。 ?什么是监督学习? 监督学习是机器学习的子集,监督学习会对机器学习模型的输入数据进行标记,并对其进行练习。因此,监督模型能最大限度地预测模型的输出结果。https://www.51cto.com/article/712484.html
5.数据分析中常用的机器学习算法有哪些?数据分析中常用的机器学习算法有哪些? 在数据分析领域,机器学习算法是一种重要的工具,可以帮助我们从数据中挖掘模式、进行预测和做出决策。下面将介绍几种常用的机器学习算法。 线性回归(Linear Regression):线性回归是一种用于建立变量之间线性关系的监督学习算法。它通过拟合一个线性方程来预测输出变量的值。线性回归https://www.cda.cn/view/204542.html
6.常用的加密方式有哪些?采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。 对称加密的优缺点:优点是算法公开、计算量小、加密速度快、加密效率高,安全、可认证;缺点是BS网络传输关系,密钥过多难维护https://nic.hnuu.edu.cn/10043/2023/0029457.html
7.机器学习常见算法类型都有哪些算法是程序员在学习软件编程开发技术的时候需要重点掌握的一个编程开发技术知识,而今天我们就通过案例分析来了解一下,机器学习常见算法类型都有哪些。 1.分类算法 这是一种监督学习方法。有很多算法帮助我们解决分类问题,比如K近邻、决策树、朴素贝叶斯、贝叶斯网络、逻辑回归、SVM等算法。人工神经网络和深度学习也往往用https://www.douban.com/note/782408490/
8.可逆加解密算法Java可逆加密算法有哪些优点:对称加密算法使用相同的密钥进行加密和解密,速度快,适用于大量数据加密。缺点:对称加密客户端和服务端使用相同的密钥,有被抓住的风险;需要大量的钥匙,密钥管理负担。常用的算法: DES:密钥长度可为128、192、256位 DES是一种分组加密技术,即16字节、24字节和32字节;AES:密钥长度64位 ,也就是说,8字节具有更高https://www.tulingxueyuan.cn/tlzx/jsp/2549.html
9.常用的压缩软件有哪些五种常用压缩软件介绍文件管理软件教程WinRAR 在 DOS 时代就一直具备这种优势,经过多次试验证明,WinRAR 的 RAR 格式一般要比其他的 ZIP 格式高出 10%~30% 的压缩率,尤其是它还提供了可选择的、针对多媒体数据的压缩算法。 2、对多媒体文件有独特的高压缩率算法 WinRAR 对 WAV、BMP 声音及图像文件可以用独特的多媒体压缩算法大大提高压缩率,虽然我们https://www.jb51.net/softjc/594611.html
10.600+道Java面试题及答案整理(建议收藏)28、常用的垃圾回收算法有哪些? 29、什么是内存泄漏? 30、为什么会发生内存泄漏? 31、如何防止内存泄漏? 32、什么是直接内存? 33、直接内存有什么用? 34、怎样访问直接内存? 35、常用的 JVM 调优命令有哪些? 36、常用的 JVM 问题定位工具有哪些? https://www.jianshu.com/p/dd215ead6e2e
11.人脸对齐介绍腾讯云开发者社区导语介绍人脸对齐的定义、任务、应用、常用算法以及难点 一、 人脸对齐,也叫做人脸特征点检测,图为人脸特征点例子 二、 人脸对齐有哪些应用? 1. 五官定位 2. 表情识别 3. 人脸漫画、素描生成 4.增强现实 5. 换脸 6.3D建模 三、 人脸对齐的任务 给定人脸区域 i,从该区域出发, 根据一定的规则 F,找到特征点位https://cloud.tencent.com/developer/article/1005756
12.程序员必须掌握哪些算法?程序员必须掌握的常用算法正如@力扣(LeetCode)所讲,主要包括以下内容:算法:1、排序算法:快速排序、https://www.zhihu.com/question/23148377/answer/714596562
13.常见的10种算法算法 研究的目的:是为了更有效的处理数据,提高数据运算效率。数据的运算是定义在数据的逻辑结构上,但运算的具体实现要在存储结构上进行。 参考原文:常见的10种算法 - 知乎 一般有以下几种常用运算: 检索:检索就是在数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。 https://blog.csdn.net/zxf347085420/article/details/136269980