算法
文章平均质量分 66
JdbcUtils
生活不止眼前的苟且,还有诗和远方。
展开
-
时间、空间复杂度分析
时间复杂度时间复杂度表示算法的执行时间与数据规模之间的增长关系。虽然代码千差万别,但是常见的复杂度量级并不多。我稍微总结了一下,这些复杂度量级几乎涵盖了你今后可以接触的所有代码的复杂度量级。O(1)首先你必须明确一个概念,O(1) 只是常量级时间复杂度的一种表示方法,并不是指只执行了一行代码。比如这段代码,即便有 3 行,它的时间复杂度也是 O(1),而不是 O(3)。 int i ...原创 2020-04-15 18:38:10 · 324 阅读 · 0 评论 -
KMP、BM、Sunday、Horspool、strstr 字符串匹配算法介绍和性能比较
文章转自:https://blog.csdn.net/qq_33515733/article/details/81163135转载 2019-08-26 16:25:46 · 1091 阅读 · 0 评论 -
雪花算法
雪花算法雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。结构:算法描述:最高位是符号位,始终为0,不可用。41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。10位的机器标识,10位的长度最多支持部署1024个节点。12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生...原创 2019-04-23 17:07:21 · 53614 阅读 · 0 评论 -
堆排序
堆是具有下列性质的完全二叉树:1. 每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;2. 每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i] >= arr[2i+1] && arr[i] >...原创 2018-05-22 16:15:03 · 14039 阅读 · 0 评论 -
梳排序
梳排序梳排序和希尔排序很类似。希尔排序是在直接插入排序的基础上做的优化,而梳排序是在冒泡排序的基础上做的优化,也就是将相距某个增量 d 的记录组成一个子序列,通过冒泡排序使得这个子序列基本有序,然后减少增量继续排序。梳排序的时间复杂度是 O(nlogn)。因为梳排序和希尔排序有点相似,所以不多说,直接上代码:public class SortTest { public static vo...原创 2018-05-15 23:37:17 · 14160 阅读 · 0 评论 -
希尔排序
希尔排序希尔排序(Shell Sort)是插入排序的一种,是针对直接插入排序算法的改进。基本思想是将相距某个增量 d 的记录组成一个子序列,通过插入排序使得这个子序列基本有序,然后减少增量继续排序。希尔排序的时间复杂度可以达到 O(n^(3/2)),要好于前面几种算法。我们来看下希尔排序的基本步骤,在此我们选择增量gap=length/2,缩小增量继续以gap = gap/2的方式,这种增量选择我...原创 2018-05-15 23:08:21 · 13998 阅读 · 0 评论 -
鸡尾酒排序
鸡尾酒排序鸡尾酒排序是冒泡排序的一种变形。先找到最小的数字,放在第一位,再找到最大的数字放在最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。鸡尾酒排序的时间复杂度为 O(n^2)。具体实现如下: public class SortTest { public static void main(String[] args) { ...原创 2018-05-15 22:48:08 · 13991 阅读 · 0 评论 -
插入排序
插入排序插入排序类似于整理扑克牌,基本操作是将一个记录分为有序数列、待插入数列。将待插入数列依次插入到有序数列中对应的位置,最终得到一个有序的数列。插入排序的时间复杂度为 O(n^2),是稳定的排序方法,适用于数量较少的排序。相对冒泡排序而言是一种较为快捷方便的排序算法。算法步骤例如:45 80 48 40 22 78 第一轮:45 80 48 40 22 78 ---> 45 80 48 ...原创 2018-05-15 22:24:49 · 18098 阅读 · 0 评论 -
选择排序
选择排序选择排序(Selection sort) 的基本思想是每一趟在 n - i + 1 (i = 1,2,***,n - 1)个记录中选取关键字最小(或最大)的记录作为有序序列的第 i 个记录,直到所有元素排序完成。选择排序是不稳定的排序算法。选择排序的时间复杂度为 O(n^2),但性能上略优于冒泡排序。直接选择排序 : 是通过设置哨位,将哨位位置的数与哨位之后(包括哨位)的序列中最小的数进行...原创 2018-05-15 21:28:05 · 13912 阅读 · 0 评论 -
冒泡排序算法
冒泡排序冒泡排序(Bubble Sort)是一种交换排序,基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。在最好的情况下,也就是数列本身是排好序的,需要进行 n - 1 次比较;在最坏的情况下,也就是数列本身是逆序的,需要进行 n(n-1)/2 次比较。因此冒泡排序总的时间复杂度是 O(n^2)。public class SortTest { ...原创 2018-05-15 20:52:38 · 13975 阅读 · 7 评论 -
快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分的记录都比另一部分小,然后再分别对这两个部分进行快速排序,最终实现整个序列的排序。快速排序的时间复杂度为 O(nlogn),是一种不稳定的排序算法;关于快速排序的理解,大家可以参考《坐在马桶上看看算法》的描述,讲的非常好,也通俗易懂。(下面描述摘自《坐在马桶上看看算法》)高快省的排序...原创 2018-05-18 00:02:50 · 18331 阅读 · 0 评论 -
归并排序
归并排序归并排序(MERGE-SORT) 是一种分治算法,是建立在归并操作上的一种有效的排序算法。常用的 2 路归并排序假设初始序列有 n 个记录,可以看成是 n 个长度为 1 的子序列,进行两两归并,可以得到 n / 2 个长度为 2 或 1 的子序列;再两两归并,******,直到得到一个长度为 n 的有序序列为止。归并排序的时间复杂度是 O(nlogn),是一种效率高且稳定的算法。...原创 2018-05-17 23:00:25 · 14041 阅读 · 0 评论