自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 堆排序

堆排序堆排序是在二叉堆的基础上进行的排序,其时间复杂度为线性对数,而且不需要额外的空间,是原址排序。import edu.princeton.cs.algs4.StdOut;public class HeapSort { public static void sort(Comparable[] a){ int N = a.length; for(int k

2016-06-05 23:24:42 357

原创 优先队列

优先队列下面这个优先队列是由一个基于堆的完全二叉树实现的,其插入和删除最大元素方法都能在对数时间内完成。二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级存储(不使用第0个元素)。二叉树有以下两个重要的特性: 1.一颗大小为N的完全二叉树的高度是lgN向下取整 2.k节点的父节点为k/2,两个子节点分别为2k和2k+1使用上面两个特性实现了sink和swim方法public c

2016-06-05 23:20:11 305

原创 快速排序

快速排序实现原理:递归的将切分元素的左边和右边排序,优点是原地排序,而且速度快,时间复杂度是线性对数的import edu.princeton.cs.algs4.StdOut;import edu.princeton.cs.algs4.StdRandom;public class Quick { public static void sort(Comparable[] a){

2016-06-05 22:42:35 317

原创 归并排序

这里一共实现了两个版本的归并排序,一个自顶而下,一个自底而上归并排序(自顶而下)实现原理:将两个已经排序好的数组合并成一个数组也是有序的。优点:能保证将任意长度为N的数组排序所需要的时间和NlogN成正比缺点:所需的额外空间和N成正比实现代码如下:import edu.princeton.cs.algs4.StdOut;public class Merge { private static

2016-06-03 14:09:29 306

原创 希尔排序

希尔排序希尔排序更高效的原因是它权衡了子数组的规模和有序性实现原理:使数组中任意间隔为h的元素都是有序的,这样的数组被称为h有序数组。如果h很大就可以一次把元素移动到很远的地方, 而不需要像插入排序一样一次只能移动一个位置。对于任意以1为结尾的h序列,都能这样将数组排序性能特点:现在仍不能准确描述对于乱序的数组的性能特征,可以肯定的是它的运行时间不到平方级别优点:代码量很小,不需要额外的内存空间,速

2016-06-03 13:43:37 385

原创 选择排序和插入排序

选择排序选择排序的设计思路是每次内层循环找出最小值放在上次最小值的后面来实现排序算法复杂度:O(N*N)它的两个鲜明的特点: 1.运行时间和输入没有关系 2.数据移动式最少的,每次交换只改变两个元素的值,交换次数和数组大小是线性关系代码实现如下:import edu.princeton.cs.algs4.StdOut;public class Selection { public st

2016-06-03 13:31:13 656

原创 动态连通性问题

动态连通性问题算法实现及优化首先定义算法的API 方法 作用 UF(int N) 初始化触点及其他数据 int find(int p) 返回p所在连通分量的标识符 int union(int p,int q) 在p和q之间添加一条线 int count () 返回连通分量的数量 boolean connected(int p,int q) 如果p和q之间

2016-05-30 13:37:00 579

原创 第一个算法优化例子

统计数组中不相同的两个数和为零的个数时间复杂度为线性对数import java.util.Arrays;public class TwoSumFast { public static int count(int[] a){ Arrays.sort(a); int N = a.length; int cnt = 0; for(i

2016-05-25 21:58:34 599

原创 栈和队列(使用链表实现)

1.栈import java.util.Iterator;public class Stack<Item> implements Iterable<Item>{ private int N; private Node first; private class Node { Node next; Item item; }

2016-05-25 11:16:14 565

原创 算法1.1 下压栈(LIFO)能动态调整数组的大小

算法1.1 下压栈(LIFO)能动态调整数组的大小代码实现如下:public class ResizingArrayStack<Item> implements Iterable<Item>{ private Item[] a = (Item[]) new Object[1];//栈元素 private int N = 0;//元素数量 public boolean isEmp

2016-05-23 23:52:04 652

原创 Dijkstra的双栈算数表达式求值算法

Dijkstra的双栈算数表达式求值算法说明:这个算法的输入要求是必须补全所有括号,否则算法会出错,数字和符号之间应该留有一个空格。import edu.princeton.cs.algs4.Stack;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class Evaluate {

2016-05-22 23:24:24 586

原创 算法四 第一章第一节基础习题

算法四第一章基础习题我只给出了代码类的习题 1.1.3  编写一个程序,从命令行得到三个整数参数。如果它们都相等则打印 equal,否则打印 not equal。 package chapter1;import edu.princeton.cs.algs4.StdIn;//这是算法第四版这本书里面的类库import edu.princeton.cs.algs4.StdOut;public cla

2016-05-20 15:34:29 2750 6

原创 第一章 答疑摘选

在第一章后面,作者列出了一些问题并给出了回答,我将其中的一些我不熟悉的问题。1.问 如何才能将一个 double 变量初始化为无穷大? 答 可以使用 Java 的内置常数:Double.POSITIVE_INFINITY 和 Double.NEGATIVE_INFINITY。 2. 问 Java 表达式 1/0 和 1.0/0.0 的值是什么? 答 第一个表达式会产生一个运行时除零异常

2016-05-19 23:21:03 265

原创 典型的数组和字符串处理代码

表1.1.4典型数组处理代码注:仅实现了关键代码,数组以double型数组为例找出数组中的最大值double max = a[0];for(int i = 1;i<a.length;i++) if(max < a[i]) max = a[i];2.计算数组的平均值double sum = 0;int N = a.length;for(int i = 0;i <N;i

2016-05-19 14:08:26 427

原创 计算两个非负整数的最大公约数

算法第四版代码现在开始学习算法,准备把书上的代码实现一遍,算是对自己学习的一个检验,希望自己可以坚持下去。计算两个非负整数 p 和 q 的最大公约数:若 q 是 0,则最大公约数为 p。否则,将 p 除以 q 得到余数 r,p 和 q 的最大公约数即为 q 和 r 的最大公约数。public static int gcd(int p, int q){ if(q == 0) r

2016-05-19 13:05:42 2379

算法第四版英文高清

完整版《算法》第四版,彩色高清

2016-05-20

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除