
算法
wugemao
这个作者很懒,什么都没留下…
展开
-
冒泡排序
冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 public class ArrayBub { private int[] array; private int nElements; public ArrayBub(int max) { this.arr...转载 2018-09-20 14:27:03 · 130 阅读 · 0 评论 -
B树与B+树
本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点...转载 2019-04-02 09:39:15 · 169 阅读 · 0 评论 -
反转链表
public ListNode reverseList(ListNode head) { if(head == null) { return null; } ListNode first = head; head = head.next; first.next = null;...原创 2018-12-18 15:46:31 · 93 阅读 · 0 评论 -
数字旋转方阵
1 2 3 4 14 15 16 5 13 30 17 6 12 19 18 7 11 10 9 8 public class RotateMatrix { private int[][] result; private int maxNum; public R...原创 2018-12-10 14:38:37 · 664 阅读 · 0 评论 -
跳表(skiplist)的理解
听到跳表(skiplist)这个名字,既然是list,那么应该跟链表有关。 跳表是有序链表,但是我们知道,即使对于排过序的链表,我们对于查找还是需要进行通过链表的指针进行遍历的,时间复杂度很高依然是O(n),这个显然是不能接受的。是否可以像数组那样,通过二分法进行查找呢,但是由于在内存中的存储的不确定性,不能这做。但是我们可以结合二分法的思想,没错,跳表就是链表与二分法的结合。 1.链表从...转载 2018-11-07 16:21:29 · 249 阅读 · 0 评论 -
CAS原理分析
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁)。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错...转载 2018-09-29 15:55:23 · 146 阅读 · 0 评论 -
快速排序
/** * 快速排序 * 快速排序采用了分治策略。就是在一个数组中取一个基准数字,把小的数放基准的左边,大的数放基准的右边。 * 基准左边和右边分别是新的序列。在新的序列中再取一个基准数字,小的放左边,大的放右边。 * 这个里面用到的递归。我们需要三个参数,一个是数组,另外两个是序列的边界 * @author HJS */public class QuickSort{ ...转载 2018-09-21 10:11:31 · 95 阅读 · 0 评论 -
选择排序
基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。public class SelectionSort { private int[] array; private int nElements; public SelectionSort(int max) { this.array = new in...转载 2018-09-20 16:02:59 · 106 阅读 · 0 评论