![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
yxmmao
这个作者很懒,什么都没留下…
展开
-
java 数组实现哈希表的构建,查找,插入,删除
public class HashSearch { /*使用数组实现hashtable的创建,查找,插入,删除*/ class Node{ //结点内部类表示hashtable中存储的元素 int key; //数据域 boolean delflag; //在删除时使用,作为删除标志 int times; //比较次数原创 2016-06-07 22:23:14 · 2239 阅读 · 0 评论 -
基数排序 java代码实现
基数排序的基本思想: 设置r个队列(r为进制数,例如十进制r=10),队列编号分别为0,1,2,… ,r-1;首先按数据元素关键字最低位上的数字值依次把n个数据元素分配到r个队列中(入队); 然后按照队列编号从小到大的顺序,将队列中的数据元素收集起来,形成一个新的数据元素序列,这就是第一趟排序。 接着对第一趟基数排序后得到的数据元素序列,再按照数据元素关键字的次低位上的数字值依次把原创 2016-06-12 21:36:52 · 2937 阅读 · 0 评论 -
二叉排序树的创建,查找,插入,删除
二叉排序树或者是空树,或者是具有以下性质的二叉树: (1)若左子树非空,则左子树上所有结点的关键字的值均小于它的根结点的关键字的值 (2)若右子树非空,则右子树上所有结点的关键字的值均大于等于它的根结点的关键字的值 (3)左右子树本身又是一颗二叉排序树二叉排序树的查找: 二叉排序树的查找与折半查找类似,根结点相当于查找区间的中点,左子树相当于前半子区间,右子树相当于后半子区间。查找过程为:原创 2016-06-06 22:41:49 · 5423 阅读 · 1 评论 -
java 实现二路归并排序
归并排序:是指将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(或有序表) 代码实现二路归并排序如下:public class MergeSort { /*二路归并算法实现数组的排序*/ /*二路归并*/ public void MergeTwo(int array[],int low,int mid,int upper){ /*将有序序列ar原创 2016-06-12 20:23:20 · 710 阅读 · 0 评论 -
java 实现折半(二分)查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表原创 2016-06-05 20:51:08 · 3082 阅读 · 0 评论 -
直接选择排序java实现
常用的选择排序方法有:直接选择排序和堆排序 直接选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列无序区的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。public class SelectSort { pub原创 2016-06-11 22:14:31 · 573 阅读 · 0 评论 -
快速排序java实现
快速排序(Quicksort)是对冒泡排序的一种改进,也是基于交换的排序,采用了分治的思想。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。public class QuickSort { public void quick原创 2016-06-11 21:46:02 · 382 阅读 · 0 评论 -
冒泡排序
冒泡排序是交换排序中最简单的排序算法,下面直接给出实现代码public class BubbleSort { public static void main(String[] args) { /*使用冒泡排序法进行排序*/ int array[]=new int[]{9,8,7,6,5,4,3,2,1}; //把待排序的数存放在数组中原创 2016-06-10 22:22:06 · 257 阅读 · 0 评论 -
java 实现n个整数的全排列
实现步骤: 输入:n个整数的序列 1:设置变量i=0; 2:置第i个位置的元素为排头元素 3:递归求排头元素外的n-1个元素的全排列 4:将排头回归第i个位置 5:i++ 6:如果i<n,则转步骤2;否则算法结束。代码实现如下:public class permutation { public static void perm(int A[],int k,int n){原创 2016-06-04 22:47:56 · 2361 阅读 · 0 评论 -
java 实现二叉树的构建,先序,中序,后序,层次,递归,非递归的遍历
以下代码实现二叉树的构建,先序,中序,后序,层次,递归,非递归的遍历public class TreeTraverse{ int array[]=new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}; //数组用以存放构建二叉树的数据 LinkedList<Node> nodelist=null; //链表用以存放二叉树原创 2016-06-04 22:34:20 · 418 阅读 · 0 评论 -
java huffman树的构造和huffman编码
以下片段实现了huffman树的构造,中序遍历,和huffman编码 /*创建两个内部类表示结点和编码*/ class Node{ //表示huffman树结点 int weight; //weight表示权重 char data; //data表示权重 //parent,left,right分别指向父结点,左右孩子的在huffman树数组中的原创 2016-06-04 22:32:30 · 791 阅读 · 0 评论 -
java 图的邻接矩阵表示,深度优先遍历,广度优先遍历
1. 创建图的邻接矩阵数据结构2. 创建图的邻接矩阵,显示邻接矩阵,实现图的深度遍历原创 2016-06-04 22:30:03 · 5016 阅读 · 1 评论 -
java 图的邻接表存储,广度优先遍历
1. 定义边结点数据结构2. 定义顶点数据结构3. 定义邻接表的数据结构4. 4.创建图的邻接表存储,显示邻接表,访问邻接表元素,广度优先遍历邻接表原创 2016-06-04 22:26:37 · 1673 阅读 · 0 评论 -
java 普里姆(Prim)算法求图的最小生成树
1. 基本思想: 设G=(V,E)是连通网,T=(U,D)是最小生成树,V,U是顶点集合,E,D是边的集合 ①若从顶点u开始构造最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v的visited[u]=1; ②若集合U中顶点ui与集合V-U中的顶点vj之间存在边,则寻找这些边中权值最小的边,但不能构成回路,将顶点vj加入集合U中,将边(ui,vj)加入集合D中,标记visited[vj]=1原创 2016-06-04 22:05:57 · 3215 阅读 · 0 评论 -
希尔排序代码实现
public class ShellSort { public static void main(String[] args) { /*使用折半插入法进行排序*/ int array[]=new int[]{9,8,7,6,5,4,3,2,1}; //把待排序的数存放在数组中 int n=array.length;原创 2016-06-08 22:52:24 · 617 阅读 · 0 评论 -
折半插入排序
从直接插入排序的过程可以看出,在每趟直接插入排序的过程中,均在有序区寻找插入位置,因此可以采用折半查找的方法寻找插入位置,这就是折半插入排序。 折半插入排序与直接插入排序相比,紧减少了关键字之间的比较次数,而数据元素的移动次数不变,折半插入排序的时间复杂度仍未O(n2).public class InsertSort { /*使用折半插入法进行排序*/ public static v原创 2016-06-08 22:03:31 · 1095 阅读 · 0 评论 -
java 直接插入排序代码
public class InsertSort { /*使用直接插入法进行排序*/ public static void main(String[] args) { int array[]=new int[]{5,4,3,2,1}; //把待排序的数存放在数组中 int i,j,temp; for(i=1;i<array.length;原创 2016-06-08 21:19:53 · 428 阅读 · 0 评论 -
堆排序java实现
堆的定义: 个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):(1)ki<=k(2i)且ki<=k(2i+1)(1≤i≤ n/2)或(ki<=k(2i)且ki<=k(2i+1)(1≤i≤ n/2)),称为小根堆(或大根堆)。k(i)相当于二叉树的非叶子结点,K(2i)则是左子节点,k(2i+1)是右子节点。 若将此序列所原创 2016-06-11 23:36:33 · 1626 阅读 · 3 评论