算法
Java-我去
这个作者很懒,什么都没留下…
展开
-
直接插入排序
直接插入排序是一种最简单的插入排序。插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。先拿一张5在手里,再摸到一张2,比5小,插到5前面,摸到一张6,嗯,比5大,插到5后面,摸到一张3,插到2和5之间,。。。每次将一个新数据转载 2015-12-06 18:53:32 · 378 阅读 · 0 评论 -
简单选择排序
简单选择排序是一种选择排序。选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。( 1 )从待排序序列中,找到关键字最小的元素;( 2 )如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;( 3 )从余下的 N - 1 个元素中,找出关键字最小的元素,重复( 1 )、( 2 )步,直到排序结束。转载 2015-12-06 16:25:36 · 399 阅读 · 0 评论 -
希尔排序
希尔(Shell)排序又称为缩小增量排序,它是一种插入排序。它是直接插入排序算法的一种威力加强版。该方法因DL.Shell于1959年提出而得名。 希尔排序的基本思想是:把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。转载 2015-12-06 23:19:53 · 1029 阅读 · 0 评论 -
快速排序
假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列。 3 1 2 5 4 6转载 2015-12-03 19:07:36 · 363 阅读 · 0 评论 -
平衡二叉树(avl树)
平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它 的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子 ) 不超过1。 也就是说AVL树每个节点的平衡因子只可能是-1、0和1(左子树高度减去右子树高度)。 那么如何是二叉查找树在添加数据的同时保持平衡呢?基本思想就是:当在二叉排序树中插入一个节点时,首先检查是转载 2015-11-29 23:24:04 · 470 阅读 · 0 评论 -
二叉树删除
二叉树的删除操作伪代码:1.若节点p是叶子,则直接删除节点p;2.若节点p只有左子树,则只需重接p的左子树; 若节点p只有右子树,则只需重接p的右子树;3.若p的左右子树均不空,则 3.1 查找节点p的右子树上最左下节点s以及s的父节点par; 3.2 将节点s的数据域替换到被删节点p的数据域; 3.3 若p的右孩子无左子树,则将s的右子树接到par的右原创 2015-11-29 17:55:01 · 1888 阅读 · 0 评论 -
二叉树排序
属性:①若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值。②若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值。③它的左、右子树也都是排序二叉树。添加操作当根节点为空时,添加进的节点作为根节点。然后每次添加节点时,都从根节点过滤,以根节点作为当前节点,如果新节点大于当前节点,则走当前节点的右子节点分支,如果新节点小于当前节点,则走当前节点的左子节点转载 2015-11-24 22:52:47 · 2374 阅读 · 0 评论 -
斐波那契查找(黄金分割法查找)(仅使用加减实现的二分查找)
什么是斐波那契查找 斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、····,在数学上,斐波那契被递归方法如下定义:F(1)=1,F(2)=1,F(n)=f(n-1)+F(n-2) (n>=2)。该数列越往后相邻的两个数的比值越趋向于黄金比例值(0.618)。 斐波那契查找就是在二分查找的基础上根据斐波那契数列进行分割的。在转载 2015-11-23 23:16:25 · 12481 阅读 · 7 评论 -
拓 扑 排 序
http://www.cnblogs.com/newpanderking/archive/2012/10/18/2729552.html转载 2015-11-22 16:54:02 · 503 阅读 · 0 评论 -
最短路径 Dijkstra(迪杰斯特拉)
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,比如数据结构、图论、运筹学等。 1、算转载 2015-11-21 23:22:56 · 911 阅读 · 0 评论 -
最小生成树
一个连通图的生成树是一个极小的连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。那么我们把构造连通网的最小代价生成树称为最小生成树。 找连通网的最小生成树,经典的有两种算法,普里姆算法和克鲁斯卡尔算法。下面分别介绍两种算法。一、普里姆(Prim)算法 普里姆算法,图论中的一种算法,可在加权连通图里搜索最小生成树。意即此算法搜索到的边子集所构转载 2015-11-21 22:53:43 · 822 阅读 · 0 评论 -
图
图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合无向边(Edge),用无序偶对(Vi,Vj)来表示。有向边,也称为弧(Arc),用有序偶来表示,Vi称为弧尾(Tail),Vj称为弧头(Head),图形显示为ucnVi---->Vj。在无向图中,如果任意两个顶点都存在边,则称为原创 2015-11-21 22:23:09 · 515 阅读 · 0 评论 -
二叉树 面试题
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack; /** * http://blog.csdn.net/转载 2015-11-04 23:20:00 · 772 阅读 · 0 评论 -
线性表的实现
顺序线性表的实现import java.util.Arrays;public class SequenceList { private int DEFAULT_SIZE = 16; // 保存数组的长度。 private int capacity; // 定义一个数组用于保存顺序线性表的元素 private Object[] elementData; // 保存顺序表中元素的当原创 2013-12-19 16:59:44 · 690 阅读 · 0 评论 -
栈的实现-----java
import java.util.Arrays;public class SequenceStack { private int DEFAULT_SIZE = 10; // 保存数组的长度。 private int capacity; // 定义当底层数组容量不够时,程序每次增加的数组长度 private int capacityIncrement = 0; // 定原创 2013-12-16 22:35:08 · 693 阅读 · 0 评论 -
队列的实现
1、 循环队列的实现import java.util.Arrays;public class LoopQueue{ private int DEFAULT_SIZE = 10; //保存数组的长度。 private int capacity; //定义一个数组用于保存循环队列的元素 private Object[] elementData; //保存循环队列中元素的当前个数原创 2013-12-17 23:05:43 · 620 阅读 · 0 评论 -
堆排序
http://www.cnblogs.com/jingmoxukong/p/4303826.html转载 2015-12-08 22:36:01 · 303 阅读 · 0 评论