随笔分类 - 数据结构
摘要:堆的介绍 Heap是一种数据结构具有以下的特点: 1)完全二叉树 2)heap中存储的值是偏序 Min heap: 父节点的值小于或等于子节点的值 Max heap: 父节点的值大于或等于子节点的值 堆的存储 一般都用数组来表示堆,i结点的父结点下标就为(i–1)/2。它的左右子结点下标分别为2 \
阅读全文
摘要:【原文:https://cloud.tencent.com/developer/article/1155143】 AVL树简介 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Bi
阅读全文
摘要:算法总结 详细十大排序算法:https://www.cnblogs.com/WindSun/category/1375215.html 图片名词解释: n: 数据规模 k: “桶”的个数 In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存 算法的分类 比较和非比较的
阅读全文
摘要:前言 桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分
阅读全文
摘要:基本思想 计数排序是一种线性排序算法,它利用了一个数组,因为数组下标的增长是线性的,所以它就把自己的元素转换成新开辟数组的下标。可是下标都是非负数啊?数组当中的值有正有负啊。做一个简单的转化就行了:找到数组中最小元素,用元素值减去,这样一来,所有元素对应的下标就求出来了。(实际上感觉像是个映射函数?
阅读全文
摘要:基本思想 基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序的一种内部排序方法。 数组下标从0-9,每个数组元素是一个链表 比如对一些三位数以内的树排序,先将个位的数值插入对应的下标的链表中,然后再放回原数组,放回的顺序和插入的顺序一致,将链表清空,再将十位的数字插入对应的下标的链表中,
阅读全文
摘要:基本思路 归并排序的基本思想是:首先将a[0..n-1]看成是n个长度为1的有序表,将相邻的k(k≥2)个有序子表成对归并,得到n/k个长度为k的有序子表;然后再将这些有序子表继续归并,得到n/k2个长度为k2的有序子表,如此反复进行下去,最后得到一个长度为n的有序表。 若k=2,即归并在相邻的两个
阅读全文
摘要:基本思路 先默认未排序区首个元素为最小,然后从后面的元素中挑出最小的元素,与这个元素交换,直至循环完成。 算法代码 算法分析 从i个记录中挑选最小记录需要比较i-1次。 第i(i=0~n-2)趟从n-i记录中挑选最小记录需要比较n-i-1。 对 n 个记录进行简单选择排序,所需进行的关键字的比较次数
阅读全文
摘要:基本思想 每趟使表的第1个元素放入适当位置(归位),并且左边的元素小于这个元素,右面的元素大于这个元素,将表一分为二,对子表按递归方式继续这种划分,直至划分的子表长为0或1(递归出口)。 快速排序递归树 算法代码 算法分析 最好情况: 此时时间复杂度为O(nlog2n),空间复杂度为O(log2n)
阅读全文
摘要:基本思路 希尔排序也是一种插入排序,又称缩小增量排序,在效率上教其他插入排序有较大的改进。 ① d=n/2 ②将排序序列分为d个组,在各组内进行直接插入排序 ③递减d=d/2,重复② ,直到d=1 算法最后一趟对所有数据进行了直接插入排序,所以结果一定是正确的。 它的基本思想是:先将整个待排记录序列
阅读全文
摘要:直接插入排序 基本思路 一趟直接插入排序:在有序区中插入R[i]的过程。 算法代码 算法分析 折半插入排序 基本思路 直接插入排序,当有序区元素太多时,在有序区中寻找插入位置可能比较的次数太多,采用折半插入法,即折半查找到要插入的位置,加快了查找效率,但是要移动的元素仍然和直接插入排序的相同,仅仅提
阅读全文
摘要:【原文: https://www.cnblogs.com/fortunely/p/10254161.html】 1.基本概念 堆,分为大顶堆(大堆)和小顶堆(小堆),是顺序存储的完全二叉树,并且满足以下特性之一: (1) 任意非终端结点关键字不小于左右子结点(大堆) ki >= k2i+1并且ki>
阅读全文
摘要:算法思想 冒泡排序分为趟数和交换次数。 外层循环为趟数,如果有n个元素则要循环n-1趟。 内层循环主要做每一趟的交换,从第0个元素开始如果发现当前元素大于它的后一个元素,将其交换,每一趟下来,最后一个元素都是最大的,所以每次循环只要循环到0~n-1-i即可,因为后面的元素就是有序的了。 算法代码 此
阅读全文
摘要:二叉搜索树的概念 从前面讨论折半搜索的性能中可知,如果每次从搜索序列的中间进行搜索,把区间缩小一半,通过有限次迭代,很快就能通近到所要寻找的元素。进一步,如果我们直接输入搜索序列,构造出类似于折半搜索的判定树那样的树形结构,就能实现快速搜索。这种树形结构就是二又搜索树。 二又搜索树(binary s
阅读全文
摘要:红黑树的介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。红黑树的每个节点上都有存储
阅读全文
摘要:线索二叉树概述 二叉树虽然是非线性结构,但二叉树的遍历却为二又树的结点集导出了一个线性序列。希望很快找到某一结点的前驱或后继,但不希望每次都要对二叉树遍历一遍,这就需要把每个结点的前驱和后继信息记录下来。为了做到这一点,可在原来的二叉链表中增加一个前驱指针域(pred)和一个后继指针域(succ),
阅读全文
摘要:二叉树的定义 以递归形式给出的:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。二又树的特点是每个结点最多有两个子女,分别称为该结点的左子女和右子女。在二又树中不存在度大于2的结点,并且二又树的子树有左、右之分,其子树的次序不
阅读全文