
数据结构与算法(java)
水银湖
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
插入排序
基本思想:很简单,就是从第二个元素开始,每一次插入的结果都是使这个元素之前的数组是有序的,以后的每次插入都是将当前元素插入进一个有序的数组中 package com.mercurylake.test; public class InsertSort { public static void main(String args[]){ int[] nums={2,5,9,4,6,8,7};原创 2016-09-22 11:41:30 · 206 阅读 · 0 评论 -
最小堆获取topK问题与堆的增删
/** * Created by heziyu-dx on 17/10/26. */ public class MinHeap { private int[] data; public MinHeap(int[] data){ this.data=data; } //完全二叉树只有下标小于等于 (data.length/2 )-1才有叶子节点转载 2017-10-26 11:35:35 · 238 阅读 · 0 评论 -
完全二叉树与满二叉树
初次学习二叉树这种数据结构的时候,我们知道,假如一棵二叉树的高度是h,对于一棵完全二叉树,它的前h-1行一定是满的,第h行可以满也可以不满(结点必须集中于最后一行的左边),如果满则是满二叉树,不满的就是完全二叉树。概念描述不是很清晰~下边画图说明吧。 那么知道这些概念之后,我们要如何判断一棵二叉树是否是完全二叉树??? 1)如果一个结点有右孩子而没有左孩子,那么这棵树一定不是完全二叉树转载 2017-10-26 10:16:02 · 380 阅读 · 0 评论 -
跳跃表实现与原理
/** * 跳表节点数据存储结构 */ class SkipNode> { public final E value; //节点存储的数据 public final SkipNode[] forward; //节点的指针数组 /** * 根据节点的层级构造一个节点 * @param level 节点层级原创 2017-08-07 15:59:14 · 251 阅读 · 0 评论 -
jdk1.8 concurrenthashmap
探索jdk8之ConcurrentHashMap 的实现机制 在介绍ConcurrentHashMap源码之前,很有必要复习下java并发编程中的一些基础知识,比如内存模型等。 存储模型 并发编程中的三个概念 1、原子性 2、可见性 3、重排序 对HashMap在jdk8有所了解 对CAS有所了解 对内置锁和显示锁等有所了解 jdk8对ConcurrentH转载 2017-02-27 11:38:57 · 370 阅读 · 0 评论 -
牛顿法求算数平方根
package com.mercurylake.test.stack; public class Sqrt { static double sqrt_(double x) { double g=x; while(Math.abs(g*g-x)>0.000001) { g=(g+x/g)/2; } return转载 2017-02-17 10:51:01 · 397 阅读 · 0 评论 -
合并有序数组
public class ArraySort { public static void main(String[] args) { int[] a = {1,3,4}; int[] b = {2,3,5,6}; int[] c = mergeArray(a, b)原创 2017-02-16 17:10:06 · 255 阅读 · 0 评论 -
两个栈实现一个队列
解释一:从队列的概念可以知道,队列无非是先进先出,而栈是先进后出,如果要栈s1 做出队列的行为,只能用另外一个栈s2接收s1的size-1个元素,然后把栈s1栈底元素弹出,再把s2的元素重新压入栈s1即可 解释二:也可以稍作优化,比如不再倒回,这样可以优化连续弹出原创 2017-02-16 16:42:13 · 217 阅读 · 0 评论 -
二叉树的插入,遍历,旋转,高度计算等
package com.mercurylake.test.tree; import java.util.Stack; public class SimpleTree { //根节点 private TreeNode root; private SimpleTree(){ this.root=new TreeNode(); } //树深度 public int he原创 2017-02-16 16:20:26 · 285 阅读 · 0 评论 -
快速排序
关于为什么叫做快速排序,我也不是特别看得懂,只是且记住这种方快速的方式罢了package com.mercurylake.test; public class QuickkkSort { /** * 快速排序讲道理就也是递归, * 首先把起始位置作为基准值 * 从两边遍历数组,另一部分大于基准值,一部分小于基准值,然后用递归的方法对数组两部分分别进行排序 */ static原创 2016-10-31 10:46:53 · 204 阅读 · 0 评论 -
归并排序
基本思想:基于分治法,将一个大的数组拆分成两个小的数组,在对两个小的数组拆分,一直拆到基本单位(一个元素,也就是最小的有序数组),然后对已经排好序的数组merge 也就是说基本可以分为两步 1.seprate 2.merge package com.mercurylake.test.mergeSort; public class Merge { public static void m原创 2016-09-22 15:35:29 · 206 阅读 · 0 评论 -
java 引用类型传递例外:null
众所周知的是,java中除基本类型外,参数都是引用传递。 但是,有一个例外,就是当实参为null时,其实,它依然是一个值传递。 也就是说,传参为null,不管函数体内用这个参数做了什么,跳出函数体后该参数依然是null 或者说,引用传递退化成为了值传递。 再进一步分析,其实是基本类型和指向null的非基本类型的指针,都在栈而非堆中,而引用传递的是堆内存地址。 类似的还有String类型。...转载 2018-09-05 16:12:13 · 388 阅读 · 0 评论