《Algorithms》学习笔记
老黑牛
一头在Android和Flutter领域深耕的老黑牛!
展开
-
1.1.9 java用二进制表示十进制整数(不用Integer.toBinaryString(N)方法)
String s="";for(int n=num; n>0; n/=2){ s+=(n%2);}转载 2015-11-25 17:18:39 · 1058 阅读 · 0 评论 -
排序算法笔记_____2(选择排序和插入排序)
选择排序package com.chapter_two;/*** * 选择排序的思想: * * 在所有的元素中找出最小的元素,与数组的第一个元素进行交换, * * 再在剩下的元素中找出最小的元素,与数组的第二个元素进行交换, * * 如此往复,最终使整个数组有序。 * * 特点: * * ①运行时间和输入无关 ②相比其他排序算法,数据移动是最小的 * * 命题:原创 2016-02-11 19:54:30 · 773 阅读 · 0 评论 -
排序笔记_______3(Shell排序)
import java.util.Random;/*** * Shell排序:(以升序为例) * * (几个典型的部分有序数组: * * 一、数组中每个元素距离它的最终位置都不远 * * 二、一个有序的大数组接一个小数组 * * 三、数组中只有几个元素的位置不正确。) * * 思想: * * 【使数组中任意间隔为h的元素都是有序的,这样的数组被称为h有序数组。】原创 2016-02-12 10:49:56 · 393 阅读 · 0 评论 -
Shell排序的递增序列
希尔排序的效率取决于算法中的递增序列,下面记下两种实际问题中常用的递增序列,以便以后查阅。 1、int N = a.length; int h = 1; while (h < N / 3) { h = h * 3 + 1; } 2、性能比第一种提高百分之20至40。将其存储在数组a中。int[] a = { 1, 5原创 2016-02-12 12:27:37 · 827 阅读 · 0 评论 -
以FixedCapacityOfString为例学泛型设计
如果我们设计一个类,比如说设计一个定容栈(FixedCapacityOfString),则它只能处理特定类型的数据。比如定容栈FixedCapacityOfString只能处理String类型的数据,若想让它处理double数据呢?我们就需要重新用类似的代码重新设计一个类,也就是将String都换成double,有点麻烦!Java中的泛型就可以不用这么麻烦的解决这个问题。 我们可以用下面的代码声明原创 2016-01-31 21:07:28 · 591 阅读 · 0 评论 -
排序笔记_4(自上而下、自底而上的归并排序)
/*** * 归并排序(分治思想的典型应用): * * 分为自上而下(递归)和自下而上(非递归,比较适合用链表组织的数据)的算法 * * 特点: * * 保证将任意长度为N的数组排序所需的时间和NlogN成正比; * 处理有百万、千万级别的元素个数的数组不成问题。 * * 缺点: * * 需要的额外空间和N成正比。 * * 改进方案: * ①对小规模的子数组原创 2016-02-14 20:41:21 · 1780 阅读 · 0 评论 -
Java对象游离
public Item pop(){//删除栈顶元素 Item item = a[--N]; a[N] = null;//**避免对象游离** ... return item;}Java的垃圾收集策略是回收所有无法被访问的对象的内存。在我们对pop()的实现中,被弹出的元素的引用仍然存在于数组中。这个元素实际上就是个孤儿了,没有谁会再访问它,但Java编译器没法知道原创 2016-02-01 20:57:19 · 2120 阅读 · 0 评论 -
排序笔记_6(三向切分的快速排序)
package com.chapter_two;import java.util.Random;/*** * 三向切分的快速排序 * * @author LuodiJack * * 思想: * * 他从从左到右遍历数组一次,维护一个指针 lt 使得 a[low .. lt-1]中的元素都小于 v, * * 一个指针 gt 使得原创 2016-02-18 21:02:46 · 654 阅读 · 0 评论 -
排序笔记_5( 快速排序)
package com.chapter_two;import java.util.Random;/*** * 普通的快速排序 (Quick) * * @author LuodiJack * * 思想:分治思想。将一个数组分成两个数组,将两部分独立排序, 关键在切分。 * * 和归并排序比较: * * 快速排序和归并排序是互补的原创 2016-02-18 21:01:47 · 716 阅读 · 0 评论 -
排序笔记_7(基于堆得优先队列)
package com.chapter_two;/*** * 基于堆(二叉堆)得优先队列 * * 二叉堆表示法: * * 如果我们用指针来表示堆有序的二叉树,那么每个元素都需要三个指针来找到它的上下节点,父节点和两个子节点。 * * 如果用完全二叉树,表达就方便多了。完全二叉树只用数组而不需要指针就可以表示。 * * 具体做法:将二叉树的节点按照层级顺序放入数组中,根节点在原创 2016-02-24 10:57:11 · 553 阅读 · 0 评论 -
排序笔记_1
1、排序算法类的模板:public class Example{ public static void sort(Comparable[] a){//排序代码 ... } private static boolean less(Comparable v, Comparable w){//对元素进行比较 return v.comparaTo(w); }原创 2016-02-11 15:09:14 · 505 阅读 · 0 评论 -
给定入栈序列判断给定出栈序列是否合法(Exercise1_3_45,java)
package chapterone;import java.util.Scanner;import java.util.Stack;/*** * @author luodijack * * thinking: 用一个辅助栈,将入栈序列按照某种顺序入栈,看是否可以产生出栈序列即可。 * 1)如果当前栈为空,且入栈序列不空,则入栈序列的下一个元素入栈; *原创 2016-02-06 11:28:19 · 2214 阅读 · 0 评论 -
Exercise1_3_37
package chapterone;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Josephus { public static void main(String[] args) { Queue<Integer> queue = new原创 2016-02-05 20:18:19 · 357 阅读 · 0 评论 -
1.2.4 一种能够累加数据的抽象数据类型
package com.chapter_one;import com.algs4.stdlib.StdDraw;/*** * 一种能够累加数据的抽象数据类型 * @author Luodi * */public class VisualAccumulator { private double total; private int N = 0; public Vis原创 2015-11-25 21:49:21 · 785 阅读 · 0 评论 -
about "static block"(静态块)
When I study the SC of the algorithms, I firstly know static block. What’s static block?static{}why do we use it? answer: to initialize the variables of static in the class. learn more原创 2016-01-16 16:14:12 · 468 阅读 · 0 评论 -
Exercise1_1_31
package chapterone;import java.awt.Color;import java.util.Scanner;import com.algs4.stdlib.StdDraw;import com.algs4.stdlib.StdRandom;public class Exercise1_1_31 { public static void drawRandConn(i原创 2016-01-20 17:02:09 · 658 阅读 · 0 评论 -
Exercise1.1.29 等值键
import java.util.Arrays;public class BinarySearch { public static int rank(int key, int[] tar) { Arrays.sort(tar); int low = 0; int high = tar.length - 1; while (low原创 2016-01-11 19:55:51 · 392 阅读 · 0 评论 -
Exercise1.1.22
package chapterone;public class Exercise1_1_22 { public static int rank(int key, int[] array) { return rank(key, array, 0, array.length - 1, 0); } public static int rank(int key, int原创 2016-01-11 20:26:09 · 327 阅读 · 0 评论 -
Exercise1_1_24
package chapterone;import java.util.Scanner;public class Exercise1_1_24 { public static int gcd1(int num1, int num2) {//大数时出现 java.lang.StackOverflowError(instance: 1111111 1234567) if (num原创 2016-01-11 21:12:31 · 437 阅读 · 0 评论 -
Exercise1_1_20
package chapterone;import java.util.Scanner;public class Exercise1_1_20 { public static int fac(int n) { if (n - 1 == 1) { return n; } else { return n * fac(原创 2016-01-11 21:26:44 · 360 阅读 · 0 评论 -
Exercise1_3_33
package chapterone;/*** *@author LuodiJack * *ResizingArrayDeque() 创建空的双向队列 *boolean isEmpty() 双向队列是否为空 *int size() 双向队列的元素数量 *void pushLeft原创 2016-02-05 14:26:34 · 440 阅读 · 0 评论 -
Exercise 1_3_34
package com.chapter_one;import java.util.Iterator;import java.util.Random;/*** * API * * @author LuodiJack RandomBag() 创建一个随机背包 boolean isEmpty() 判断随机背包是否为空 int * size() 背包中元素数量 void add(原创 2016-02-05 15:53:43 · 487 阅读 · 0 评论 -
关于Comparable接口
每一个需要排序的类都必须实现Comparable接口,才能进行排序。 在Java中,比如Integer、Double、String 等,都实现了此接口,由此我们才能调用类似Array.sort(a)这样的排序算法对数组a进行排序。 如果我们自己写了个类,并且需要对这个类进行排序,那么我们必须实现此接口。例如:Date类class Date implements Comparable<Date>{原创 2016-02-24 09:04:56 · 2773 阅读 · 0 评论