
程序员内功修炼
Clumsy-Bird
热情!主动!严谨!
展开
-
数据结构与算法-冒泡排序
数据结构与算法-冒泡排序基本概念代码实现图示执行过程进一步优化时间复杂度分析基本概念冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。代码实现//申明待排序数组int[] a = {9,1,5,8,3,7,4,6,2};for (int i = 0; i < a.length; i++)原创 2018-12-07 17:43:13 · 738 阅读 · 0 评论 -
数据结构与算法-栈与队列
概要栈和队列都是特殊的线性表栈基本概念栈的应用-递归栈的应用-四则运算表达式求值【后缀(逆波兰)表示法】队列基本概念栈和队列都是特殊的线性表 何为线性表?栈基本概念 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)...原创 2019-01-30 11:00:41 · 353 阅读 · 0 评论 -
数据结构与算法-线性表
概要一图胜千言线性表基本概念线性表顺序存储顺序存储-查询顺序存储-插入和删除顺序存储-总结线性表链式存储链式存储-查询链式存储-插入和删除线性表单链表结构与顺序存储结构对比循环链表双向循环链表一图胜千言线性表基本概念 线性表(List):零个或多个数据元素的有限序列。 若将线性表记为(a1, ···, ai-1, ai, ai+1, ···, an),则表中ai-1领先于ai,ai...原创 2019-01-28 16:53:51 · 559 阅读 · 0 评论 -
数据结构与算法-赫夫曼树(最优二叉树)、赫夫曼编码
概要赫夫曼树定义如何构造赫夫曼树赫夫曼编码赫夫曼树定义 以两棵带权的二叉树为例: 从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称为路劲长度。二叉树a中,根结点到结点D的路径长度就为4,二叉树b中根结点到结点D的路径长度为2。树的路径长度就是从树根到每一结点的路径长度之和。二叉树a的树路径长度就为1+1+2+2+3+3+4+4=20。二叉树b的树路径长度...原创 2019-01-31 17:28:34 · 898 阅读 · 0 评论 -
数据结构与算法-二叉树遍历
概要基本概念研究二叉树遍历的必要性四种遍历方法前序遍历中序遍历后序遍历层序遍历基本概念 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。研究二叉树遍历的必要性 如果我们用图形的方式来表现树的结构,应该说是非常直观和容易理解,但是对于计算机来说,它只有循环、判断等方式来处理,也...原创 2019-01-31 16:35:23 · 2945 阅读 · 1 评论 -
数据结构与算法-基本概念
概要数据结构基本概念逻辑结构与物理结构抽象数据类型算法定义特性设计的要求时间复杂度概念推导大0阶方法常见的时间复杂度最坏情况与平均情况空间复杂度数据结构基本概念 结构,简单的理解就是关系,比如分子结构,就是说组成分子的原子之间的排列方式。严格点说,结构是指各个组成部分相互搭配和排列的方式。 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 注:数据元素 – 是组成数据...原创 2019-01-21 14:31:35 · 450 阅读 · 0 评论 -
数据结构与算法-二叉排序树创建、查找、删除(Swift实现)
概要基本概念二叉排序树查找二叉排序树插入二叉排序树创建二叉排序树删除删除叶子结点或仅有左右子树之一的结点删除左右子树都有的结点总结基本概念二叉排序树(Binary Sort Tree),又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右...原创 2019-01-09 17:36:26 · 1279 阅读 · 0 评论 -
数据结构与算法-平衡二叉树(AVL树)-思想篇
概要基本概念实现原理图示平衡二叉树构建过程思想总结基本概念 平衡二叉树(Self-Balancing Binary Search Tree 或 Height-Balanced Binary Search Tree),是一种二叉排序树,其中每一个结点的左子树和右子树的高度差至多等于1。 我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF(Balance Factor),那么...原创 2019-01-11 11:07:56 · 2070 阅读 · 0 评论 -
数据结构与算法-线性索引查找
概要引入基本概念线性索引之稠密索引线性索引之分块索引线性索引之倒排索引引入       折半查找、插值查找以及斐波那契查找这几种查找方法虽然比较高效,但都是基于有序的基础之上的,而事实上,很多数据集可能增长非常快,例如某些微博网站或大型论坛的帖子和回复总数每天都是成百万上千万条,或者一些服务器的日志信息记录也可能是海原创 2018-12-25 14:32:46 · 550 阅读 · 1 评论 -
数据结构与算法-有序表查找(折半查找、插值查找、斐波那契查找)
概要引入折半查找基本概念折半查找java代码实现折半查找算法复杂度分析折半查找改进版1:插值查找折半查找改进版2:斐波那契查找总结引入顺序查找虽然算法非常简单,对静态查找表的记录没有任何要求,但是当查找表记录数很大时,查找效率极为低下,所以只适用于小型数据的查找。折半查找基本概念折半查找(Binary Search)技术,又称为二分查找。它的前提是线性表中的记录必须是关键码有序(通常...原创 2018-12-24 18:06:25 · 2067 阅读 · 0 评论 -
数据结构与算法-顺序查找
概要查找概论顺序查找基本概念java代码实现时间复杂度分析查找概论      只要你打开电脑,就会涉及查找技术。如炒股软件中查找股票信息、硬盘文件中找照片等,都要涉及到查找。当然,在互联网上查找信息就更加是家常便饭。所有这些需要被查数据所在的集合,我们给它一个统称叫查找表。&原创 2018-12-24 14:56:49 · 1467 阅读 · 0 评论 -
数据结构与算法-归并排序
概要归并的概念归并排序的基本概念java代码实现图示代码执行过程算法复杂度分析归并的概念“归并”一词的中文含义就是合并、并入的意思,而在数据结构中的定义是将两个或两个以上的有序表合成一个新的有序表。归并排序的基本概念归并排序(Merging Sort)就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1,然后两两归并,...原创 2018-12-18 16:44:56 · 311 阅读 · 0 评论 -
数据结构与算法-堆排序
概要简单选择排序的改进堆的基本概念堆排序的基本思想java代码实现图示执行过程时间复杂度分析简单选择排序的改进      &am原创 2018-12-17 15:25:46 · 392 阅读 · 0 评论 -
数据结构与算法-直接插入排序
概要基本概念java代码实现图示执行过程时间复杂度分析基本概念直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录数增1的有序表。java代码实现/* 申明待排序数组 */int[] a = {9,1,5,8,3,7,4,6,2};int i,j;int flag; for (i = 1; i &...原创 2018-12-10 14:30:32 · 1128 阅读 · 0 评论 -
数据结构与算法-简单选择排序
概要选择排序法初步思想基本概念java代码实现图示执行过程时间复杂度分析选择排序法初步思想爱炒股票断线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利。但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少。还有一种做股票的人,他们很少出手,只是在不断的观察和判断,等到时机一到,果断买进或卖出。他们因为冷静和沉着,以及交易的次数少,而最终收益颇丰。冒泡排序的...原创 2018-12-10 11:08:34 · 799 阅读 · 0 评论 -
数据结构与算法-散列表查找(哈希表)
概要基本概念散列函数构造方法处理散列冲突的方法java代码实现散列表查找性能分析基本概念 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位...原创 2018-12-26 14:07:03 · 1858 阅读 · 1 评论 -
数据结构与算法-希尔排序
概要背景铺垫基本原理java代码实现图示代码执行过程时间复杂度分析背景铺垫      希尔排序是D.L.Shell于1959年提出来的一种排序算法,在这原创 2018-12-14 15:50:16 · 480 阅读 · 0 评论 -
数据结构与算法-快速排序
概要快速排序是冒泡排序的升级版基本思想java代码实现图示代码执行过程进一步优化1:优化选取枢轴进一步优化2:优化不必要的交换进一步优化3:优化小数组时的排序方案进一步优化4:优化递归操作算法复杂度分析快速排序是冒泡排序的升级版快速排序和冒泡排序都属于交换类排序。即它也是通过不断比较和移动交换来实现排序的,只不过它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,...原创 2018-12-19 15:36:32 · 650 阅读 · 0 评论 -
数据结构与算法-串
概要基本概念串的比较串的存储结构顺序存储链式存储串的模式匹配朴素模式匹配算法(低效)KMP模式匹配算法(推荐)基本概念 串(string)是由零个或多个字符组成的有限序列,又名叫字符串。一般记为s=“a1a2···an”(n≥0),其中s是串的名称,用双引号括起来的字符序列是串的值。ai(1≤i≤n)可以是字母、数字或其他字符,i就是该字符在串中的位置。串中的字符数目n称为串的长度。 ...原创 2019-01-30 14:31:49 · 502 阅读 · 0 评论