IDEA是SándorP. Fekete,Sebastian Morr和Sebastian Stiller汇编的一些算法说明。它们最初是为不伦瑞克工业大学Sándor算法和数据结构讲座而创建,作者发布它们,希望它们能够用于各种背景的教学和学习。
二分查找
二分查找是一种快速从一个有序数组中找到某个元素位置的查找算法。这有点类似于猜数字游戏,通过不断问“目标数字是大于还是小于某个数”这样的问题,最终猜出目标数字。
限定元素区间。
待查找元素在区间的某个位置吗?
不在。
那么看看待查找元素是不是在当前位置的左边或者右边。
快速排序
快速排序是一种“分而治之”的排序算法,通过随机选择“分区点”来避免出现最坏的情况。
随机选择“分区点”。
按照“分区点”的高度划条线。
高出“分局点”的元素需要向右移动。
低于“分区点”的元素需要向左移动。
移动元素。
重复上述的步骤分别对位于“分区点”两边的元素进行排序。
Bogo 排序
Bogo 排序也被称为“愚蠢的排序”,是一种非常简单但低效的排序算法,就是不断打乱元素的顺序,直到达到有序为止。
查看元素是否有序。
元素无序,那么就打乱顺序。
再次检查元素是否有序。
如果有序,排序成功,否则继续重复上述步骤。
归并排序
归并排序也是一种“分而治之”的递归排序算法。
把元素分成两部分,对每一个部分采用递归的归并排序。
比较已经排好序的元素。
合并已经排好序的元素。
排序完毕。
图遍历
图遍历算法会遍历图中所有可达的顶点,可以通过辅助数据结构来实现各种遍历,比如使用无序集合实现随机遍历,使用堆栈实现深度优先遍历,使用队列实现广度优先遍历。
随机查找:选定一个顶点,把它放入一个无序集合中。从集合中取出一个顶点,访问该顶点,把该顶点的相邻顶点放入集合中,并把该顶点移出集合。重复这一过程,直到集合中的元素全部被遍历完毕。
深度优先遍历:选定一个顶点压入栈中,把该顶点其中的一个相邻顶点也压入栈中。访问栈顶的顶点,如果该顶点没有其他相邻的顶点,就出栈。如果有其他相邻顶点,就把其中的一个相邻顶点压入栈中。重复这一过程,直到栈中的元素全部被遍历完毕。
广度优先遍历:选定一个顶点,把该顶点的相邻顶点放进队列尾部。访问队列头部的顶点,把该顶点移出队列,如果该顶点有相邻顶点,就把相邻顶点放进队列尾部。重复这一过程,直到队列中的元素全部遍历完毕。
一笔画
一笔画是一种 Fleury 算法,旨在优雅地找出图中的欧拉(Eulerian)路径。欧拉路径是图中的一条路径,刚好经过每条边,并且每条边只被访问一次。
顶点度数表示该顶点有几条边。
如果图中有且仅有两个顶点的度数为奇数,其他为偶数,或者不存在奇数度数的顶点,则存在欧拉路径。
选定一个顶点开始画路径。
如果存在两个以上的桥,那么可以走桥。如果只剩下一个桥,就不能走桥,除非只剩下桥可以走。
如果还有没有走过的边,重复步骤 4。
成功画出欧拉路径。
如果您觉得不错,请别忘了转发、分享、点赞让更多的人去学习, 您的举手之劳,就是最好的支持,非常感谢!
在此我向大家推荐一个架构学习交流群。交流学习群号:938837867 暗号:555 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备