十大经典排序算法,常用算法

如何才能记住各种算法?

十大经典排序算法,常用算法


这个问题问得很好 , 我那时候也是有着困惑 。没入门的话 , 先看看几大经典的排序算法(直接插入 , 希尔排序 , 简单选择 , 堆排序 , 冒泡排序 , 快速排序 , 归并排序 , 基数排序) , 可以把代码背诵下来 , 然后复现 。但最好理解代码背后的数学逻辑 , 当你使用这些基础算法的时候 , 脑海里有个图浮现出来 , 然后你在这上面完善它整个算法流程 。
我那时候学习的方法是用扑克牌来学习经典算法 , 后面熟了之后就可以在代码上快速复现它 。不积跬步 , 无以至千里;不积小流 , 无以成江海 。现在有个网站是可以用动画学习算法和数据结构——VisuAlgo 。VisuAlgo是由Steven Halim博士在2011年发布的一款可视化学习算法的工具 , 用于帮助其学生更好地理解数据结构和算法 , 可以让学生按自己的步骤来学习 。
下图是VisuAlgo的主页 , 不得不说我上去体验后感觉很有趣 , 很适合对基础算法的学习和了解 , 是一个找到后令人惊喜的网站 。VisuAlgo里面包含了许多先进的算法 , 这些算法在Steven Halim博士的书籍里都有讨论 。就某种意义而言 , 这些先进的算法可视化/动画基本只能在VisuAlgo中找到 。例如在图遍历可视化中 , 里面不仅标准的深度优先搜索(DFS)和广度优先搜索(BFS)算法 , 还包含了它们的变异 。
之前没有这个网站时我是用笔和扑克牌来理解算法的 , 现在工具方便了 , 但是道理还在那 。知识的体系结构类似一棵树 , 如果你想要学得快记得牢固 , 就必须把主干和粗线条先学习扎实 , 因为后来的高级知识类似树叶 , 需要有主干的支持才能挂靠牢固 。如果你对学习人工智能和深度学习感兴趣 , 可以订阅我的头条号 , 我会在这里发布所有与算法、机器学习以及深度学习有关的有趣文章 。
你是怎么理解算法的 , 在生活中你的最常用的算法是怎么运作的?
十大经典排序算法,常用算法


概念算法(Algorithm)是基于特定的计算模型 ,  旨在解决某一信息处理问题而设计的一个指令序列 。不正式地说 , 算法是任何定义明确的计算过程 , 该过程取某个值或值的集合作为输入 , 并产生某个值或值的集合作为输出 , 算法就是这样的把输入转换成输出的计算步骤的一个序列 。[1]必备特征算法必须具有以下特征:输入:待计算问题的任一实例 , 都需要以某种方式交给对应的算法 , 对所求解问题特定实例的这种描述统称为输入;输出:经计算和处理之后得到的信息 , 即针对输入问题实例的答案 , 称作输出;确定性:算法应可描述为由若干语义明确的基本操作组成的指令序列;可行性:每一基本操作在对应的计算模型中均可兑现;有穷性:任意算法都应在执行有限次基本操作之后终止并给出输出 。
【十大经典排序算法,常用算法】实际例子算法不是计算机领域中才有的概念 , 不仅仅局限于编程语言 , 它可以用任何方式来描述 , 比如对于问题:过直线l上给定的点P , 作该直线的垂线 。古埃及人解决该问题的一个算法为:输入:直线l及其上一点P输出:经过P且垂直于l的直线1. 取12段等长绳索 , 依次首尾联结成环 , 联结处称作“结” , 按顺时针方向编号为0到112. 奴隶A看管0号结 , 将其固定于点P处3. 奴隶B牵动4号结 , 将绳索沿直线l方向尽可能地拉直4. 奴隶C牵动9号结 , 将绳索尽可能地拉直5. 经过0号和9号结 , 绘制一条直线计算机中的算法则是描述计算机上的计算过程 , 比如插入排序算法的伪代码描述:输入:n个数的一个序列

推荐阅读