数据结构与算法
汉森X
哈工大计算机系学生
展开
-
图的java实现
什么是图结构图(Graph)结构也是一种非线性数据结构,并且每个数据元素之间可以任意关联。正是任意关联性,导致了图结构中数据关系的复杂性。一个典型的图结构包括如下两个部分:顶点(Vertex):图中的数据元素。边(Edge):图中连接这些顶点的线。无向图:如果一个图结构中所有的边都没有方向性,这称为无向图。有向图:如果一个图结构,边是有方向性的,这称为有向图。权:在实际应用中图的边往往需要表示原创 2016-07-14 19:06:49 · 6225 阅读 · 0 评论 -
Java实现图的遍历(深度优先与广度优先遍历)
点击跳转到文章原文图的遍历所谓图的遍历,即对图中的每个节点进行访问,而对含有许多点的图遍历并不轻松,往往有如下两种遍历策略:深度优先遍历广度优先遍历深度优先遍历深度优先遍历,即从初始节点开始访问,而初始节点与多个节点相连接,所以,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点。总结起来可以这样说:每次都在访问完当前结点后首先访问当转载 2016-09-27 19:08:48 · 10284 阅读 · 5 评论 -
java实现查找算法——折半查找(二分查找)
折半查找算法折半查找(Binary Search)又称为二分查找,其要求数据序列呈线性结构,也就是经过排序的。对于没有经过排序的,可以查阅我之前的排序算法文章进行预排序,然后进行折半查找操作。譬如数组{1,2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8,原创 2016-09-26 18:53:10 · 7057 阅读 · 2 评论 -
Java实现排序算法——归并排序
归并排序算法一个待排序的原始数据序列进行归并排序的基本思路是,首先将含有n个节点的待排序序列看作是有n个长度为1的有序表组成,将它们两两合并,得到长度为2的有序子列若干,然后在对这些子序列两两合并,得到长度为4的若干有序子列,重复上述过程,直到最后的子列长度为n,从而完成排序过程。代码实现如下:public class MergeSort { public static void main(S原创 2016-09-26 12:39:07 · 511 阅读 · 0 评论 -
Java实现排序算法——堆排序
堆排序(Heap Sort)算法是基于选择排序思想的,其利用堆结构和二叉树的一些性质来完成数据的排序。堆排序在某些场合具有广泛的应用。堆排序过程一个完整的堆排序需要经过反复的两个步骤:构造堆结构和堆排序输出。构造堆结构就是把原始的无序数据按照堆结构的定义调整,将无序数据放置到一个完全二叉树中,然后由完全二叉树的下层逐渐进行父节点数据的比较,是父节点数据大于左右子节点的数据,直到所有节点都满足条件位原创 2016-09-26 12:02:56 · 381 阅读 · 0 评论 -
Java实现排序算法——快速排序
快速排序算法(Quick Sort)和冒泡排序算法类似,都是基于交换排序的思想。快速排序对冒泡排序法进行了改进,从而具有更高的执行效率。快速排序算法通过多次比较和交换实现排序,其排序流程如下:1.首先设定一个分界值将数组分成左右两部分。2.将大于等于分界值的数据集中在数组的右边,小于等于分界值的数据集中到数组的左边。此时左边部分各元素都小于等于分界值,右边部分各元素都大于等于分界值。3.然后,原创 2016-09-26 11:04:29 · 576 阅读 · 1 评论 -
Java实现排序算法——希尔排序
Shell排序算法Shell排序算法严格来说基于插入排序的思想,其又称为希尔排序或者最小增量排序。Shell排序算法流程如下:1.将有n个元素的数组分为你n/2个数字队列,第1个数据和第n/2+1个数据为一对,……2.一次循环使每个序列对排好序。3.然后,再变成n/4个序列对,再次排序。4.不断重复上述过程。随着序列减少最后变成一个,也就完成了整个排序。public class Shell原创 2016-09-26 10:26:23 · 462 阅读 · 0 评论 -
Java排序算法——选择排序
选择排序(Selection Sort)也是比较简单的排序算法,思路也比较直观。选择排序算法在每一步中选择最小值来重新排列,从而达到排序的目的。选择排序算法选择排序算法通过选择和交换来实现排序,其排序流程如下: (1) 首先从原始数组中选择最小的一个数据,将其与第1个数据位置交换。 (2) 接着从剩下的n-1个数据中选择次小的1个数据,将其和第2个位置的数据交换。 (3) 然后 ,这样不断重复原创 2016-07-14 22:04:37 · 421 阅读 · 0 评论 -
Java实现排序算法——插入排序法
插入排序(Insertion Sort)通过对未排序的数据执行逐个插入合适的位置而完成排序工作。插入排序算法的思路比较简单,使用比较多。插入排序算法插入排序算法通过比较和插入来实现排序,其排序算法流程如下: (1) 首先对数组的前两个数据进行从大到小排序。 (2)接着将第3个数据与排好序的两个数据比较,将第3个数据插入到合适位置。 (3)然后将第4个数据插入到已排好序的前3个数据中的合适位置。原创 2016-07-14 22:34:16 · 699 阅读 · 0 评论 -
排序算法——冒泡排序法
冒泡排序法(Bubble Sort)是所有排序算法中最简单,最基本的一种。冒泡排序法的基本思路就是交换排序,通过相邻数据的比较来达到排序的目的。冒泡排序法冒泡排序算法通过多次比较和交换数据来实现排序,其排序流程如下: (1)对数组中的各元素依次比较相邻元素的大小。 (2)如果前面的数据大于后面的数据,就交换这两个数据。经过第一轮排序,则最大值已经排到最后。 (3)再用同样的方法将剩下的数据逐个原创 2016-07-14 21:30:31 · 1761 阅读 · 0 评论 -
二叉树的java实现
二叉树在树结构中,二叉树是最简单的一种形式。我们在研究树结构的时候,二叉树是重点。因为二叉树的描述相对简单,处理也相对简单。而且更为重要的是任意的树都可以转化为对应的二叉树。因此,二叉树是所有树结构的基础。什么是二叉树二叉树是树的一种特殊形式,其是n个节点的集合,每个节点最多有两个子节点。二叉树的子树仍然是二叉树。二叉树的一个节点对应的两个子树分别称为左子树和右子树。由于子树有左右之分,所以二叉树为原创 2016-07-14 17:12:45 · 407 阅读 · 0 评论 -
KMP算法JAVA实现
KMP算法为的是解决两个字符串匹配问题的算法,检查一个字符串是否为另一个的子串,a= “abc” , b = “aabcd” , b串里包含了一个a串,KMP算法可以以O(M+N)的复杂度找到子串在b中的位置。下面是我通过不同博客资料最终总结出的算法:1.首先要弄清什么是KMP算法:请查看 阮一峰老师写的介绍KMP的博客,这是一篇真的容易懂的KMP算法介绍点击此处跳转到文章出处2.JAVA实现计算出转载 2016-09-28 21:28:10 · 2744 阅读 · 3 评论