- 博客(5)
- 收藏
- 关注
原创 堆排序
堆排序分为变成大根堆还是小根堆;大根堆就是跟节点大于左右子节点就ok,小根堆跟它相反,根节点小于左右子节点;有一个无序的树(就是你要排序的数组,放在树里),你想要对它进行排序的话,首先要确定从大到小还是从小到大,因为这个分别对应大根堆还是小跟堆;随便说一个,就说变成大根堆(从大到小):首先一个无序的树,你找到最下面一层的节点,每两个子节点或一个子节点和他们的父节点都看成一个单位,在这一
2015-09-12 15:07:25 338
原创 直接插入排序,折半插入排序,希尔排序
这三种都属于插入排序; 1.直接插入排序就是先拿出两个排好序,然后再依次加入这个有序序列中,比较简单,但是时间复杂度为O(n2); 2.折半插入排序是在直接插入排序的基础上改进的,每次插入到有序序列的时候,用折半查找找到要插入的位置,然后插入,能稍微快一点; 3.希尔排序(缩小增量排序)每次选一个增量,这个增量为上一次的一半,第一次为排序个数的一半,就是每次隔增量个位
2015-09-11 22:29:36 533
原创 二叉排序树相关操作
二叉排序树定义就是左子树比根小,右子树比根大;中序遍历出来的书递增的有序序列; 先说它的查找:类似于二分查找,时间复杂度为logN,这个很好理解吧,就是拿你要找的数从根比,大的话走右面,小的话走左面,每次减少一半; 再说它的插入:只要这个节点不是最底层的节点(就是这个节点下面没有其他节点了),就跟它比较如果小于就往左走,如果大于就往有走,走到空时插入;java实现:
2015-09-11 18:26:06 277
原创 sleep和wait的区别
如果这下面说的看不太懂,可以先去看一下上一篇可能会好一点;线程调用了wait()方法的话,该线程将会自己所有的锁标记和CPU的占用,并且进入等待池(wait pool),等待池的状态是阻塞状态;顺便说一下对应的notify()方法,会从等待池中释放一个线程,这个线程是有系统决定的 ,让该线程进入该对象的锁池(lock pool),等待得到锁标记,然后再执行;notifyall()方法取代n
2015-09-01 15:47:45 358
原创 synchronized和lock的区别
先说一下什么是同步(synchronized和lock都是实现这个的): 每一个对象都有一个互斥的锁标记和一个锁池,哪个线程拥有锁标记哪个才能访问,没有锁标记的线程就进入锁池,保证同步代码块中只有一个线程 synchronized修饰的代码块是对括号内的对象加锁,只有拥有锁标记的线程能访问; synchronized修饰的函数方法是整个方法范围内对当前
2015-09-01 14:26:23 942
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人