算法
Lebron_Chen
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何判断一个单链表是否有环以及环入口
这是一个在我们学习数据结构的时候经常会遇到的问题,今天给大家带来这个问题的几种解法。 方法一 最容易想到的办法就是遍历单链表,如果单链表有环的话那么会进入死循环,但是我们不知道单链表的长度,所以如果单链表长度很长,我们一直向下遍历,也无法分辨出是单链表还没遍历完还是进入了死循环。 所以这种解法不靠谱。 方法二 我们可以在遍历单链表中的每个元素的时候,每遍历一个新的节点,就从头再开...原创 2018-08-05 14:18:55 · 8685 阅读 · 4 评论 -
了解一下一致性Hash算法
引子 我们在做分布式缓存的时候,通常会对需要存储key进行一定的算法,然后使该key均匀的落到每一个节点进行存储。 最简单的实现算法是普通余数Hash算法,按照节点数量,对key的hashCode进行取余,根据结果将key随机分配到不同节点上。 举个例子: 假设缓存服务器有三个节点,我们标记为0号节点,1号节点,2号节点。 每次往缓存中插入数据的时候,会先对key取余,余数是几则存到几号...原创 2018-08-02 22:42:17 · 547 阅读 · 0 评论 -
冒泡排序算法、时间复杂度和稳定性
冒泡排序 冒泡排序一般是我们学习排序算法时第一个接触的算法,下面来介绍一下冒泡排序。 算法原理 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一步,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 算法分析 ...原创 2018-08-07 19:55:51 · 20201 阅读 · 1 评论 -
选择排序算法、时间复杂度和稳定
选择排序 算法原理 将数据分为有序部分和无序部分。 在无序部分找出最大的元素,将最大的元素和无序部分最后一个元素交换,使得无序部分最后一个元素并入有序部分。 重复第二步,直到无序部分都插入到有序部分结束。 算法分析 排序的思想就是维护一个有序的部分,将无序部分中最大的元素和最后一个元素相交换,交换后无序部分的最后一个元素也将有序。 通俗的讲,选择排序的原理就是: 先从头遍历...原创 2018-08-07 19:56:37 · 15020 阅读 · 8 评论 -
插入排序算法、时间复杂度和稳定性
插入排序 算法原理 将数据分为有序部分和无序部分。 在无序部分选择一个元素,按照顺序插入到有序部分,使之有序。 直到无序部分都插入到有序部分结束。 算法分析 排序的思想就是维护一个有序的部分,将无序部分的数据按照顺序插入到有序部分。 通俗的讲,插入排序的原理就是: 先将最后一个元素作为有序部分,前面元素作为无序部分,将倒数第二个元素和最后一个元素比较,如果倒数第二个元素大于...原创 2018-08-07 19:57:13 · 10431 阅读 · 1 评论 -
快速排序算法、时间复杂度和稳定性
快速排序 算法原理 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 解法一 算法分析 排序的思想就是先选择一个基数,通过一趟排序将数据分割成两个部分,比基数小的放在基数前面,比基数大的放在基数后面。再对这两个部分采用同样的排...原创 2018-08-07 19:57:42 · 6518 阅读 · 2 评论 -
归并排序算法、时间复杂度和稳定性
归并排序 算法原理 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 算法分析 排序的思想就是将元素无限拆分,直到无可拆分为止,再将拆分的元素两两按序合并。 归并排序的原理可以通过下面这张图看清楚: 代码实现 /** * @Title: mergeSort ...原创 2018-08-07 19:58:15 · 5322 阅读 · 0 评论 -
位运算符以及常见的使用场景
Java中的位运算有七种: << 左移 >> 右移 >>> 无符号右移 & 位与 | 位或 ~ 位非 ^ 位异或 其中位非(~)是一元运算符,其他六个都是二元运算符。 这些位运算符都是作用在二进制的数上的,先列一个表描述一下这几种位运算符: 下面来一一介绍一下这几种位运算符 位运算符介绍 1...原创 2018-08-21 17:17:18 · 21764 阅读 · 13 评论
分享