数据结构
文章平均质量分 86
sun_star1chen
这个作者很懒,什么都没留下…
展开
-
查找之一 , 顺序查找
在写顺序查找之前呢,先介绍几个概念:1、 查找表 :相同类型的数据元素组成的集合。2、 关键字: 数据元素中能够唯一标示数据元素的项(一项或多项)。3、 查找 : 根据给定的key(关键字)值,查找某一数据元素,如果存在满足条件的数据元素则查找成功,否则查找失败。如果查找成功,一般返回该数据元素所在的位置。4、 静态查找: 查找时只对数据元素进行查询或检索。5、动态查找:原创 2014-01-06 21:53:13 · 1147 阅读 · 0 评论 -
广义表操作 (Java实现)——广义表深度、广义表长度、打印广义表信息
广义表是对线性表的扩展——线性表存储的所有的数据都是原子的(一个数或者不可分割的结构),且所有的数据类型相同。而广义表是允许线性表容纳自身结构的数据结构。广义表定义: 广义表是由n个元素组成的序列:LS = (a1,a2, ... an);其中 ai是一个原子项或者是一个广义表。n是广义表的长度。若ai是广义表,则称为LS的子表。广义表表头和表尾: 若广义表LS不空,则a1原创 2014-01-06 09:03:10 · 4962 阅读 · 1 评论 -
合并排序(MergeSort)
public class MergeSortDemo { public static void mergeSort(int[] data) { if (null == data || data.length == 0) { return; } mergeSort(data, 0, data.length - 1);原创 2014-01-29 08:59:18 · 1433 阅读 · 0 评论 -
堆排序(Heap Sort)原理及Java实现
先看看堆(Heap)的概念:对于集合元素 R = { k1 , k2 , k3 , ... kn };如果满足1:Ri >= R2i ;其中(2i 2: Ri >= R2i+1 ; 其中(2i+1 或满足1:Ri =2: Ri =称为称为该序列是一个堆(最大堆 或 最小堆)。堆排序的思想是对堆中的第一个元素和最原创 2014-01-23 22:46:14 · 2735 阅读 · 1 评论 -
选择排序(Selection Sort)原理及Java实现
选择排序(Selection Sort )分为两种 简单选择排序(Simple Selection Sort) 和树形选择排序。简单选择排序(Simple Selection Sort):简单选择排序类似于冒泡排序(Bubble Sort) ,每次都会在剩下的元素集合中选择出一个最值出来填充到当前位置。唯一的区别是,冒泡排序在每次发现比当前值小于(或大于)时,都会交换元素的位置,原创 2014-01-16 09:10:01 · 3017 阅读 · 0 评论 -
快速排序(QuickSort)原理及Java 实现
快速排序(QuickSort )是常用到的效率比较高的一种排序算法,在面试过程中也经常提及。下面就详细讲解一下他的原理、给出一个Java版本的实现。快速排序思想:通过对数据元素集合Rn 进行一趟排序划分出独立的两个部分。其中一个部分的关键字比另一部分的关键字小。然后再分别对两个部分的关键字进行一趟排序,直到独立的元素只有一个,此时整个元素集合有序。快速排序的过程——挖坑原创 2014-01-15 09:14:45 · 10473 阅读 · 1 评论 -
直接插入排序(Straight Insertion Sort)
写排序方法之前还是先介绍一下排序相关的概念:排序:将任一资源(内存中的数据或文件等等)通过某种方式整理成 按关键字 有序排列的过程 叫排序。排序的稳定性: 对序列中的两个或两个以上的相等的数据(Ri = Rj , i != j), 排序前 Ri 先于 Rj , 排序后Ri 仍然先于 Rj ,则称该排序是稳定的。否则称为该排序是不稳定的。比较算法的评判标准: 时间复杂度、控件复杂度、算法原创 2014-01-13 08:54:37 · 1105 阅读 · 0 评论 -
字符串匹配算法——KMP && BF
字符串匹配操作定义:目标串S="S0S1S2...Sn-1" , 模式串T=“T0T1T2...Tm-1”对合法位置 01、S[i ... i+m-1] = T[0 ... m-1] , 则从位置i开始匹配成功,称模式串 T 在目标串 S 中出现。2、S[i ... i+m-1] !=原创 2014-01-02 08:57:25 · 1499 阅读 · 0 评论 -
冒泡排序(Bubble Sort)原理及Java实现
冒泡排序 (Bubble Sort) 算法是一种基于交换的排序算法,其思想是,依次比较相邻元素的大小,如果反序,则进行交换,然后再进行下一次排序——如果数据集合的长度为n ,则下一次对前n-1的数据进行冒泡排序。 比如: 第一趟排序 :R1 和R2 比较, R2 和 R3 比较 .... Rn-1 和Rn 比较。得到最大值或最小值Rn 第二趟排序: R1 和R2 比较, R2 和 R原创 2014-01-14 08:44:14 · 1963 阅读 · 0 评论 -
希尔排序(Shell Sort)
希尔排序的原理:将待排序数据元素集合按照一定的大小分块在块间的数据按照增量(步长)进行直接插入排序,然后根据一定的规则减少步长,再进行一次直接插入排序,直到步长小于1 。希尔排序需要注意的是最后的增量一定是1 。下面先给出Java实现代码:public static void shellSort(int array[]) { if (null == array || 1原创 2014-01-13 22:26:38 · 1174 阅读 · 0 评论 -
约瑟夫环问题(josephus problem)详解
约瑟夫环问题描述: 编号为1,2,3...n的人一词围成一圈,从第k个人开始报数(从1开始),数到m的人退出。接着下一个人又从1开始报数,数到m的人退出,以此类推。问:剩下的人的编号是多少? 如:n=6,m=3,k=1 原始序列: 1 2 3 4 5 6 ; 从编号1开始报数 第一轮数完后的序列为: 1 2 4 5 ; 3、6出列——从编号1开始报数原创 2013-12-26 23:11:22 · 12573 阅读 · 0 评论 -
查找之四 , fibonacci 查找
Fibonacci 查找的方法是根据Fibonacci 数列的特点对查找表进行分割。其查找表有一个特点就是: 查找表的长度等于某个Fibonacci 数值减 1 。即:n = table.length , fn = fib(k) ; n = fn -1 ;如果不满足这个条件,则不能使用Fibonacci 查找方法进行查找。使用 l , h , m ,表示待查找表的下界、上界 、 和原创 2014-01-09 22:34:08 · 1360 阅读 · 0 评论 -
查找之二 , 二分查找
二分查找的思想是:对一个非空的有序的查找表进行如下比较(以下假设是升序排列):查找找表的低位 low , 高位 high ,如果 middle = (low + high) / 2 的值等于key值,则查找成功;如果 middle的值小于key的值,说明key可能在后半段,low=middle ;如果 middle的值大于key的值, 说明key可能在前半段, high = low原创 2014-01-07 21:34:34 · 1137 阅读 · 0 评论 -
查找之三 , 块查找
分块查找又称为索引查找,它结合顺序查找和二分查找方法。在分块查找中我们首先需要知道查找表的构造,而查找表构造的要求如下:1、将查找表分块,块与块之间是有序的,而块内无序。即第 i 块内的最大值,小于等于第 i + 1块的最小值。2、根据查找表构造一个索引表 , 索引表的结构是按照关键字有序的。索引表中每个Item的结构如下:最大关键字起始位置原创 2014-01-08 22:24:13 · 1022 阅读 · 0 评论 -
基数排序(Radix Sort)——java实现
关于基数排序的相关概念这里就不多说了,参考基数排序 。 觉得麻烦的看下面的内容:基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序的效率:基数排序的时间复杂度是 O(k·n),其中n是排序元素个数,k是数字位数。注意这不是说这个时间复杂度一定优于O(n·log(n)),因为k的大小一原创 2014-03-02 22:37:25 · 4414 阅读 · 0 评论