java数据结构与算法
黑洞刺客
这个作者很懒,什么都没留下…
展开
-
栈和队列
本章主要介绍栈、队列栈、队列与数组结构类型差异性数组更多的是用来进行数据的存储,纯粹用来存储数据的数据结构,本章所讲的数据结构和算法更多地是作为程序员工具来使用,主要作为构思算法的辅助工具。这些数据结构的生命周期比数据库类型的结构要短得多,在程序执行期间它们才被创建,通常用它们去执行某项特殊的业务,执行完成之后,它们就被销毁。数组知道下标可直接访问数据项或者顺序搜索数据项,访问到数组中的各数据...原创 2019-03-13 22:32:29 · 96 阅读 · 0 评论 -
希尔排序
一、概述希尔排序是希尔(Donald Shell)于1959年提出的一种不稳定排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。首先我们知道直接插入排序的时间复杂度最低的时候应该是序列基本有序,待排序的记录个数较少时,效率较高。基于这个基础理论,希尔排序的基本思想如下:先将整个待排记录序列分割成若干子序列,分别进行直接插入排序,待整个序...原创 2019-03-27 21:46:47 · 290 阅读 · 0 评论 -
各种排序算法总结
一、排序分类内部排序:整个排序过程不需要访问外存便能完成。外部排序:参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成。二、性能比较排序方法 平均情况 最好情况 最坏情况 空间 稳定性 冒泡 O(n2) O(n) O(n2) O(1) 稳定 简单选择排序 O(n2) O(n2) O(n2...原创 2019-03-31 17:53:17 · 215 阅读 · 0 评论 -
快速排序
简介快速排序是对冒泡排序的一种改进, 它是不稳定的。由C. A. R. Hoare在1962年提出的一种划分交换排序,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数,它的最好情况O(nlogn),最坏情况O(n^2),平均时间复杂度为O(nlogn)。基本思想选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后...转载 2019-03-31 17:00:42 · 14537 阅读 · 15 评论 -
2-3-4树
二叉树在之前章节已经做了介绍, 二叉树每个节点只有一个数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树。本篇博客我们将介绍的2-3-4树,它是一种多叉树,它的每个节点最多有三个数据项和四个子节点。2-3-4树介绍2-3-4树每个节点最多有三个数据项和四个字节点,名字中 2,3,4 的数字含义是指一个节点可能含有的子节点的个数,对于非叶节点有三种可能的情...转载 2019-03-31 11:37:09 · 230 阅读 · 0 评论 -
哈希表
Hash表也称散列表,它是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组、链表、树等数据结构不同,在这些数据结构中查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间级。把关键字转换为数组的下标,这个转换的函数称为哈希函数(也称散列函数),转换的过程称为哈...转载 2019-03-23 22:23:06 · 335 阅读 · 0 评论 -
红黑树
简介红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。红黑树特性每个结点或是红色的,或是黑色的 。根节点是黑色的 。每个叶结点(NIL)是黑色的 。如果一个节点是红色的,则它的...转载 2019-03-23 13:37:39 · 207 阅读 · 0 评论 -
哈夫曼树
简介哈夫曼树的带权路径长度最小,故也称之为最优二叉树。相关术语①路径: 在一棵树中,一个结点到另一个结点之间的通路称为路径。如下图从根结点到结点a之间的通路就是一条路径。②路径长度: 在一条路径中,每经过一个结点,路径长度都要加1。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为i-1。如下图从根结点到结点c的路径长度为3。③结点的权: 给每一个结点...转载 2019-03-21 22:51:20 · 373 阅读 · 0 评论 -
图
一.图的定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成。图的术语①邻接:如果两个顶点被同一条边连接称这两个顶点是邻接的,如上图I和G就是邻接的,而I和F就不是。有时候也将和某个指定顶点邻接的顶点叫做它的邻居,比如顶点G的邻居是 I、H、F。②路径:路径是边的序列,比如从顶点B到顶点J的路径为BAEJ,当然还有别的路径BCDJ,BACDJ等。③连通图和非连通图:如果...转载 2019-03-25 14:07:48 · 203 阅读 · 0 评论 -
堆
队列章节中我们已经介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大或最小关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现,这种实现方式尽管删除最大数据项的时间复杂度为O(1),但是插入还是需要较长的时间 O(N),因为每次插入平均需要移动一半的数据项来保证插入后,数组依旧有序。因为插入效率问题,引入另一种数据结构:堆,它是一种树,由它实现的优先级...转载 2019-03-24 21:30:43 · 153 阅读 · 0 评论 -
冒泡、选择、插入排序算法
一、冒泡排序算法描述①、比较相邻的元素,如果第一个比第二个大,就交换他们两个。②、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数(也就是第一波冒泡完成)。③、针对所有的元素重复以上的步骤,除了最后一个。④、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码实现:public static void bubb...原创 2019-03-12 22:37:43 · 248 阅读 · 0 评论 -
递归
百度百科中的解释是这样的:递归(recursion)做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一、递归的定义递归就是在运行的过...转载 2019-03-17 12:31:22 · 206 阅读 · 0 评论 -
链表
数组回顾无序数组:搜索低效。有序数组:插入低效。不论哪种数组,删除效率都很低,涉及数据移动,而且数组创建后大小不变。链表简介为了解决上面的问题,引入另一种数据结构:链表,链表是继数组之后第二种使用得最广泛的存储结构,除非通过下标随机访问数据,否则很多地方可以使用链表替换数组。链表分类:单链表,双端链表,有序链表,双向链表,有迭代器的链表(迭代器是用来随机访问链表元素的一种方法),下面介绍各...转载 2019-03-16 22:15:59 · 98 阅读 · 0 评论 -
数组
重复值问题?数组数据插入是可以重复的,假设不可插入重复数据,比较允许重复和不允许重复的数据操作效率。 不允许重复 允许重复 查找 N/2次比较 N次比较 插入 无比较,一次移动 无比较,一次移动 删除 N/2次比较,N/2次移动 N次比较,多于N/2次移动 Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数...原创 2019-03-12 14:07:36 · 158 阅读 · 0 评论 -
二叉树(上)
前几章介绍了数组和链表等数据存储结构回顾下数组和链表数据结构特征对于有序数组,查找很快(二分查找),插入数据必须找到插入数据项的位置,插入位置后的数据项全部向后挪动,来给新插入数据项腾出空间,平均移动次数N/2,这是很费时的,删除也是。对于链表,链表插入和删除数据项很快,但查找很慢,需要从头到尾遍历,这个查找平均需要N/2次。那么同时具备两种数据结构特性:查找快,插入删除快,引入了另外一种...转载 2019-03-19 22:13:02 · 136 阅读 · 0 评论 -
二叉树(下)
一、用数组表示树数组表示树,那么节点是存在数组中的,节点在数组中的位置对应于它在树中的位置。下标为0的节点是根,下标为1的节点是根的左子节点,以此类推,按照从左到右的顺序存储树的每一层。二叉树特征①树中的每个位置,无论是否存在节点,都对应于数组中的一个位置,树中没有节点的在数组中用0或者null表示。②假设当前节点索引值为index,那么节点左子节点是2*index+1,节点右子节点...转载 2019-03-19 22:01:37 · 158 阅读 · 0 评论 -
前缀、中缀、后缀表达式
什么叫前缀表达式,中缀表达式,后缀表达式?它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例:(3 + 4) × 5 - 6 中缀表达式- × + 3 4 5 6 前缀表达式3 4 + 5 × 6 - 后缀表达式中缀表达式(中缀记法)中缀表达式是一...转载 2019-03-14 21:50:48 · 206 阅读 · 0 评论 -
简介2-3-4树与红黑树之间关系
2-3-4树与红黑树是多叉树与二叉树的关系,看上去完全不同,但是在某种意义上它们又是完全相同的,一个可以通过应用一些简单的规则变成另一个,而且使他们保持平衡的操作也是一样,数学上称他们为同构。①转化规则应用如下三条规则可以将2-3-4树转化为红黑树:一、把2-3-4树中的每个2-节点转化为红黑树的黑色节点。二、把每个3-节点转化为一个子节点和一个父节点,子节点有两个自己的子节点:W和X或X和...原创 2019-04-02 21:01:43 · 1831 阅读 · 1 评论