我们看一下最简单的排序算法(也是性能最低、最好理解的),这里叫“交换排序”。 注意,这个名字是作者自己起的,网上和相关技术书籍上都没有这个算法的名字。算法矩阵的解释从 i+1 到矩阵末尾的元素,索引 j。 当 i 处的元素大于 j 处的元素...
冒泡排序算法解释 与上面的交换排序类似,冒泡排序也是使用两级循环实现的;但不同的是: 循环边界条件:冒泡排序的外层是[0, array.count-1);内层是[0, array.count-1-i)。可以看到,内层的射程不断减小,射程...
选择排序算法详解选择排序也是一个两级循环:外层循环的边界为[0, array.count-1),索引为 i。 内层循环的边界为[i+1, array.count),索引为j,可以看到内层的范围也在不断递减,范围的前面正在变成返回,而背面保持...
插入排序算法解释和快速代码实现 从数组其他元素开始排序。如果取出的元素比本元素小,则放在本元素的左边;否则,它将被放置在右侧。一般来说,这看起来有点像在玩扑克时对你刚刚拿起的牌进行排序。 插入排序也是一个两级循环:外层循环的边界是[1, a...
归并排序算法讲解归并排序使用了分而治之的思想)(分而治之的思想。顾名思义,就是将一个大的将问题分解成类似的小问题,逐一解决。在实现归并排序算法时,首先将数组逐渐划分为最小的组成部分(通常是1个元素),然后反向逐步合并。用图像来了解融合算法的...
快速排序算法被称为20世纪十大算法之一,也是各大公司面试时最喜欢研究的算法。快速排序算法详解,那么就可以继续对这两条记录的部分进行排序,从而达到对整个序列进行排序的目的。 上面的文字摘自《大话数据结构》,实现步骤如下: 从序列中选择一个元...
贝尔曼-福特算法(Bellman–Ford算法)用于计算从起点到每个节点的最短距离,并支持存在‘负权重其概念就是画一个图做大部分的V-1平滑工作来得到最短路径。 Dijkstra算法的优点是边权可以为负且实现简单。缺点是时间复杂度太高,可达...
贪心算法(greedyalgorithm)是指在解决问题时,每一步都采用最好的或最优的选项(即最有利的),所以是可取的。如果结果是最好或最优的算法。 贪心算法得到的结果往往不是最优结果(有时是最优解),而是相对(接近)最优解。 贪心算法没...
Dijkstra 算法(Dijkstra)用于在没有非负权重的情况下计算从起点到每个节点的最短距离 可用 2 类问题: 有从 A 地到 B 地的路吗? 从 A 到 B 的最短路径(最少时间、最少路径等)。事实上,最终计算完成后,我们...
广度优先搜索算法(Breadth First Search),又称“广度优先搜索”或“水平优先搜索”,简称BFS; BFS 用于图搜索算法(要求能够使用图来表示问题之间的关系)。 BFS 可以用来解决两类问题: 是否有从 A 到 B 的路...