Zohar's blog

排序

排序指将一组无序的记录序列调整为有序的记录序列。若不需要访问外存,则称为“内部排序”。若参加排序的记录数量很大,无法仅在内存中完成,则称为“外部排序”。

插入排序

遍历数组,将每个元素逐个插入到已排序的数组中

插入排序

希尔排序

将数组按照一定步长拆分为相互间隔的多组数组,对每组数组进行插入排序

希尔排序

选择排序

遍历未排序的数组,选择其中的最小值,与已排序数组的后面一位元素交换

选择排序

堆排序

将未排序数组变成堆,取出堆顶放入已排序数组

堆排序

冒泡排序

每一次遍历数组时将最大的元素推向数组末端直至完成排序

冒泡排序

鸡尾酒排序(双向冒泡排序)

左右同时遍历数组,将最大元素推向右端,最小元素推向左端

鸡尾酒排序(双向冒泡排序)

快速排序

选取一个数,把比它小的放在它的左边,比它大的放在它的左边!

快速排序

归并排序

分而治之,把数组分成两半,先排左边一半,再排右边半,然后整理并合起来

归并排序

基数排序

对所有数据的各个位数使用容器进行归类,从低到高,奇妙的排序方法

基数排序

最短路径是计算某一节点到其他节点的最短距离,单一节点到其他节点的最短路径称为“单源最短路径”,任意节点到其他节点的最短路径称为“多源最短路径”。

A* 算法

通过启发函数引导算法的搜索方向,以求解两点间最短的有效路径

Dijkstra 算法

以起始点为中心向外层层扩展,直到扩展到终点为止

Floyd 算法

利用动态规划的思想寻找给定的加权图中多源点之间最短路径

Prim 算法

寻找与已生成的局部最小生成树所连通的路径权值最小的点,并将其加入最小生成树中

Kruskal 算法

将权值最小的边一一连接起来,成环则换下一条

字符串匹配

字符串匹配问题就是在一个大的字符串 String 中搜索某个字符串 Pattern 的所出现位置,包括所有出现的位置和最先/最后出现的位置。

KMP 算法

利用匹配失败后的信息,尽量减少模式串与主串的匹配次数

KMP 算法

Sunday 算法

在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配

Sunday 算法

数据结构

为了解决问题,我们创造了各式各样的工具。但学习、进步的过程并不是要有问题的时候才来学些使用工具,而是在问题到来时,我们早已能够选择并使用恰当的工具来解决问题

我们在寻找客栈时,数据同样寻求一个能够暂时栖息的地方,所以有了栈

队列

数据可比人类文明多了,只要你创造出队列,能破坏秩序的人就只有你自己

散列表

因为你在这个世界中独一无二,所以我才能在这片汪洋中一样就看到你

双端队列

当一辆无尽的列车直直地驶向镜子,在碰到镜子之后,它是穿过去了,还是离去了?

身在谷底,依然希望一眼阅群山

优先队列

计算机世界里的数据也懂得老弱病残孕优先的道理呢

算术

算术是所有其他算法的根基,加减乘除,取反求模,取幂对偶,这才是真正的数字魔法

质数

孤独的质数循环又无期,在世界的尽头等待偶遇

求最大公约数

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。