
数据结构与算法分析
TangowL
这个作者很懒,什么都没留下…
展开
-
有关位操作的总结
Bit manipulation is the act of algorithmically manipulating bits or other pieces of data shorter than a word. Computer programming tasks that require bit manipulation include low-level device control, error det原创 2016-08-15 14:34:22 · 743 阅读 · 0 评论 -
各种排序算法的原理、Java实现与比较分析(三)
前面两篇博文介绍了各种排序算法的原理、特点和Java实现,本文将对前述各种算法进行比较分析。1、排序算法总结2、排序算法的选择(1)数据规模较小待排序列基本序的情况下,可以选择直接插入排序对稳定性不作要求宜用简单选择排序,对稳定性有要求宜用插入或冒泡(2)数据规模不是很大完全可以用内存空间,序列杂乱无序,对稳定性没有要求,快速排序,此时要付出log(N)的额外空间序列本身可能有序,对稳定性原创 2016-09-09 10:25:38 · 690 阅读 · 2 评论 -
各种排序算法的原理、Java实现与比较分析(二)
三、交换排序3.1 冒泡排序(1)基本思想 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。(2)特点冒泡排序是一种稳定的排序方法冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法起泡排序平均时间复杂度为O(n2)(3)Java实现pa原创 2016-09-09 10:18:58 · 1105 阅读 · 2 评论 -
各种排序算法的原理、Java实现与比较分析(一)
排序算法,从大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序。如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。内排序有可以分为以下几类:插入排序:直接插入排序、二分法插入排序、希尔排序。选择排序:简单选择排序、堆排序。交换排序:冒泡排序、快速排序。归并排序基数排序原创 2016-09-08 17:04:56 · 2705 阅读 · 2 评论 -
数据结构与算法分析(三) —— 关于树的深入探讨
前面介绍的链表结构的线性访问时间,在大规模输入数据时显得太慢了,因此,需要介绍一种新的数据结构,二叉查找树(BST)。我们先对BST及其引申树的因果关系作介绍,再分别进行详细介绍,最后进行一些比较。BST可以实现对数平均开销,但这严重依赖于输入,即要求输入是随机的,如果输入是有序数据,由于BST失衡,导致线性平均开销。因此,需要对BST进行改造,引入平衡的结构条件。平衡二叉树的常用算法很多,形成的树原创 2016-07-18 15:59:31 · 916 阅读 · 2 评论 -
数据结构与算法分析(三) —— AVL树的实现
本文实现了AVL树,有几个注意点:insert和remove引起的失衡都可以用同样的旋转进行修复:Case1:k2的左子树的左子树比其右子树高2 —— k2进行左单旋Case4:k1的右子树的右子树比其左子树高2 —— k1进行右单旋Case2:k3的左子树的右子树比其右子树高2 —— k3进行左双旋 —— k3左子树先进行右单旋再对k3进行左单旋Case3:k1的右子树的左子树比其左子树高原创 2016-07-21 10:07:44 · 1486 阅读 · 0 评论 -
数据结构与算法分析(一) —— 深入理解递归算法的调用过程
本文旨在对递归算法的方法调用过程进行深入的研究,理清调用过程。原创 2016-05-11 19:59:01 · 2461 阅读 · 0 评论 -
数据结构与算法分析(二) —— 关于表、栈和队列的深入探讨
本文讨论三种最简单的数据结构,也是抽象数据类型(ADT)的最基本的例子:表、栈和队列。1、ADTADT即带有一组操作的一些对象的集合。诸如表、集合、图以及它们与各自的操作一起形成的这些对象都可以被看做是ADT。ADT的定义中并没有对其实现有任何提起,Java类虽然考虑到了ADT的实现,但也隐藏了实现的细节。对于每种ADT并不存在什么法则来约束他们必须要有哪些操作。我们下面详细讲述的三种ADT都有多种原创 2016-05-20 10:26:54 · 1409 阅读 · 2 评论 -
数据结构与算法分析(二) —— ArrayList泛型类的实现
在学习数据结构与算法分析过程中,便于使用的ArrayList类的实现是个很好的练手项目,本博文将提供详细的代码,给出一个便于使用的ArrayList泛型类的实现。为了避免与类库中的类相混淆,我们将其命名为MyArrayList。由于程序较长,也相对简单,不太想逐段分析,我们先将几个注意点指出,后面放出整段程序。(1)首先,注意Collection和Collections是完全不同的两个概念。java原创 2016-06-17 16:37:53 · 1920 阅读 · 1 评论 -
数据结构与算法分析(二) —— LinkedList泛型类的实现
在学习数据结构与算法分析过程中,便于使用的LinkedList类的实现是个很好的练手项目,本博文将提供详细的代码,给出一个便于使用的LinkedList泛型类的实现。为了避免与类库中的类相混淆,我们将其命名为MyLinkedList。由于程序较长,也相对简单,不太想逐段分析,我们先将几个注意点指出,后面放出整段程序。很多关于接口的知识可以参阅 数据结构与算法分析(二) —— ArrayList泛型类原创 2016-07-06 15:18:36 · 898 阅读 · 0 评论 -
数据结构与算法分析(三) —— 二叉查找树的实现
BST 实现算法原创 2016-07-19 10:33:08 · 846 阅读 · 0 评论 -
数据结构与算法分析(一) —— 数学基础
这段时间,该开始数据结构与算法分析的学习了。跟以前一样,学习同时整理成博文是个不错的学习方式,因此,后面一段时间将对数据结构与算法分析进行讲解学习,希望有兴趣的同学一起讨论学习。数据结构,即组织大量数据的方法;算法分析,即算法运行时间的估计。很多时候,写出一个工作程序并不够,如果这个程序需要在巨大的数据集上运行,那么运行时间就成为了重要的问题。原创 2016-05-09 10:20:58 · 2889 阅读 · 1 评论 -
排序算法的原理、实现、优缺点
这里的排序算法指内部排序算法,即对内存中的数据进行排序。1 概述排序算法大体可分为两种:比较排序 时间复杂度 O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。非比较排序 当数据本身包含了定位特征时,才能不通过比较来确定元素的位置。时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。选择排序算法,需要原创 2018-05-12 20:02:15 · 4194 阅读 · 0 评论