
算法
lby0307
这个作者很懒,什么都没留下…
展开
-
算法系列(二)查找算法--基本查找和二分查找
在 算法系列(一)基本概念 一文中,简单介绍了算法基本概念,算法复杂度评估,常用算法证明方式。这篇文章介绍一下查找算法,主要是二分查找算法。从n个元素中A0,A1....An-1中,找到要找到的元素x,最简单的方法是遍历n个元素,找到元素x则返回x的位置,这种算法的时间复杂度为O(n)。如果这n个元素是有序的,我们不需要从头到尾遍历一遍就可以找到要查找的元素,可以使用二分法。二分查找的时间复杂度是...转载 2018-02-26 14:00:28 · 143 阅读 · 0 评论 -
字符串模式匹配算法---KMP算法
0. 前言 一个字符串"BBCABCDABABCDABCDABDE"中是否包含另一个字符串"ABCDABD"? KMP就是最常用的字符串匹配算法之一。KMP有着优秀的时间复杂度O(m+n),网上有很多KMP算法的解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面我用自己的语言,试图写一篇比较好懂的KMP算法解释。 1. 算法过程解释 首先,字符...原创 2018-04-14 20:47:04 · 436 阅读 · 0 评论 -
3种简单排序(选择,冒泡,直接插入)
排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数,供排序时调用 /** * 交换数组元素 * @param arr * @param a * @p...转载 2018-03-18 08:40:58 · 182 阅读 · 0 评论 -
归并排序
基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段...转载 2018-03-18 08:30:40 · 119 阅读 · 0 评论 -
希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现。基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增...转载 2018-03-18 08:28:33 · 140 阅读 · 0 评论 -
堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组...转载 2018-03-18 08:21:41 · 127 阅读 · 0 评论 -
快速排序基本思路(通俗易懂+例子)
快速排序今天看到大神写的一篇快速排序的博客,肃然起敬,觉得原来快速排序这么简单 下面进行简单的试试快速排序的基本思想是1、先从数列中取出一个数作为基准数2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边3、再对左右区间重复第二步,直到各区间只有一个数概括来说为 挖坑填数+分治法下面举例来进行说明,主要有三个参数,i为区间的开始地址,j为区间的结束地址,X为当前的开始的值第...转载 2018-02-26 14:30:44 · 1146 阅读 · 0 评论 -
算法系列(三)排序算法上篇--冒泡排序插入排序和选择排序
在算法系列(二)查找算法 一文中,主要介绍了二分查找。这篇文章来介绍一下排序算法。排序算法概述排序算法比较多,分两个篇幅来讲。由易道难。先总体看一下都有哪些排序算法冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序,计数排序,基数排序,希尔排序,桶排序。排序算法分类根据排序过程中待排序文件存放的位置不同,可以把排序分为内部和外部排序两大类。在排序过程中,所有需要排序的数都在内存,并在内存中调...转载 2018-02-26 14:13:40 · 198 阅读 · 0 评论 -
算法系列(四)排序算法中篇--归并排序和快速排序
在算法系列(三)排序算法上篇 一文中,介绍了冒泡排序,插入排序和选择排序算法。这篇文章继续讲解排序算法。概述冒泡排序,插入排序和选择排序算法这些算法的时间复杂度都是O(N^2),是否有更高效的排序算法呢?当然有了,堆排序,归并排序,快速排序,它们的时间复杂度都是O(nlogn)。堆排序使用了树结构,到目我们前还没有介绍树相关的算法,这里先分析归并排序跟快速排序。归并排序基本原理归并排序使用了一个被...转载 2018-02-26 14:11:42 · 171 阅读 · 0 评论 -
一篇文章搞定面试中的二叉树题目(java实现)
https://www.jianshu.com/p/0190985635eb转载 2018-04-24 21:47:41 · 219 阅读 · 0 评论