
数据结构与算法分析
相大大
不写博客的厨师,不是好码农
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉查找树
取自JAVA书籍,数据结构与算法分析。其中remove方法添加了理解信息。1、整体源码结构public Class BinarySearchTree<AnyType extends Comparable<? super AnyType>> { //二叉树结构 private static class BinaryNode<AnyType> { /*-----*/} privat翻译 2017-02-20 21:42:18 · 221 阅读 · 0 评论 -
排序--插入排序
插入排序的基本思想,假设数组前面位置的元素已经排序好,新插入一个元素a[p], 由a[p]与前面a[p-1]比较,若a[p]public static <AnyType extends Comparable<? super AnyType>> void insertSort(AnyType [] a) { int j; for(int p=1; p< a.length; p++)翻译 2017-02-24 19:49:15 · 208 阅读 · 0 评论 -
排序--希尔排序
shellSort 又称为增量排序,间隔gap的位置组成的数组都各自排好序,再gap越来越小直到1,排好整个数组。public static <AnyType extends Comparable<? super AnyType>> void shellSort(AnyType [] a) { int j; for(int gap= a.length/2; gap> 0; gap/=2)翻译 2017-02-24 20:06:39 · 257 阅读 · 0 评论 -
排序--堆排序
/** *heapsort */ private static int leftChild(int i) { return 2 * i +1; }private static <AnyType extends Comparable<? super AnyType>> void percDown(AnyType [] a, int i, int n) { int child; A翻译 2017-02-24 20:22:37 · 279 阅读 · 0 评论 -
二叉堆
堆是一颗完全被填满的二叉树,有可能的例外是在底层,底层的元素从左到右填满。完全二叉树 二叉堆又可分为最大堆,最小堆。最小堆就是节点元素值小于等于两儿子。 完全二叉树可以用一个数组表示,a[0] 位置空出(后面有用)对于数组任意位置i上的元素, 其左儿子在位置2i上,右儿子在位置2i+1上, 父节点在i/2上。因此不需要链。问题在最大的堆的大小需要事先估计,但是一般不成问题,可以调整大小。// B翻译 2017-02-24 21:58:48 · 272 阅读 · 0 评论 -
实际快速排序 -分割策略
快速排序,枢纽元(比较值)理论上选哪个都可以。实际快速排序包括划分策略 和递归调用。public static <AnyType extends Comparable<? super AnyType>> void quicksort(AnyType [] a) { quicksort(a, 0, a.length-1); }private static final int CUTOFF= 3;翻译 2017-02-25 12:25:49 · 399 阅读 · 0 评论 -
快速选择
选择第K个最大(小)元private static <AnyType extends Comparable<? super AnyType>> void quickSelect(AnyType a, int left, int right, int k) { if(left+ CUTOFF <= right) { AnyType pivot= median3(a, left,翻译 2017-02-25 12:48:28 · 231 阅读 · 0 评论 -
递归算法改进---fibonaci 函数
采用一个表代替递归/** *Compute Fibonaci numbers * f(0)=1, f(1)=1 * f(n)= f(n-1)+ f(n-2); *程序效率低下,运行时间也是T(N) 成指数级增长 */ public static int fib( int n) { if(n<= 1) return 1; else return fib(翻译 2017-02-26 13:00:58 · 624 阅读 · 0 评论 -
递归算法改进---表存储代替冗余递推
/**求解递归关系 *Sum=C(0)+C(1)+...+C(N-1); 即求和运算 *C(N)=(2/N) Sum +N **/ public static double eval( int n) { if (n == 0) return 1.0; else { duoble sum= 0.0; for(int i= 0; i< n; i翻译 2017-02-26 13:22:43 · 379 阅读 · 0 评论