目录介绍
源码文件存储目录:/home/cuixiaogang/ops
应用软件安装目录:/home/cuixiaogang/app
依赖软件安装目录:/home/cuixiaogang/libs
开发源码存储目录:/home/cuixiaogang/www
依赖编译安装...
二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。
相关术语
结点:包含一个数据元素及若干个指向其子结点的信息
结点的权:结点中存储的数据的值
路径:从根结点找到该结点的路线
度:一个结点拥有子结点的个数被称为结点的度,一个树...
数据的查找算法较排序算法简单,并且常用的查找方案只有几种。
顺序查找
二分查找
插值查找
斐波那契查找
树表查找
分块查找
哈希查找
查找算法的分类
根据具体的实现逻辑不同,大体上可以把查找算法分为两大类:静态查找、动态查找,
静态查找:指查找表中无删除和插入操作。
动态查找:指查找表中有删除和插入操作。
根据查找的前提条件可以分为两大类:无序查找、有序查找
无序查找:指...
时间复杂度
时间复杂度是判断一个算法的执行时间的性能指标,通常是一个代表算法输入值的字符串长度的函数,使用大O符号进行标数,不包括这个函数的低阶项和首项系数。
每一个算法都会存在一个实际的执行次数函数T(n),其中n代表的是每一个“操作单元”,并且认定每一个操作单元的所运行的时间都是相同的。如果将实际的执行次数函数T(n)中的低阶项、首项系数进行省略,就得到了我们所说的时间复杂度函数。省略...
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。
算法要点
计数排序也是桶排序的一种,
计数排序适用于数据量很大,但值分布范围很小的场景下
第一步需要获取到序列中的最大值,最小值,创建一个长度为最大值-最小值的空的计数序列,其中序...
基数排序属于“分配式排序”,又称“桶子法”,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用
算法要点
基数排序属于桶排序的一种,所以桶排序的问题,在基数排序中依然存在
获取序列中最大元素的位数
依次根据序列中元素的个位数值,将元素放到0-9号十个桶中
将十个桶中的元素一次放回到序列中
继续根据每个元素的十位数值执行3步骤、4步骤,直到最大元素的位数...
是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。
算法要点
通过递归的模式,将序列不断的从中间拆分,直到不可拆分为止,这一步骤称为“分”
通过递归的模式,将拆分后的两个序列通过对比两个序列的每...
通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
算法要点
在一个序列中,随机先找出一个基准点(基准点取得好不好,影响到快排的性能,后面回对基准点如何找进行详细学习并记录)
将比基准点小的元素放在基准点的左侧,比基准点大的放在基准点的右侧
从左到右依次与基准点比较,找到大于基准点的一个节点,并...
希尔排序是是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本,通过把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
算法要点
将一个序列中的数据按一定的步长step划分为n组,对每个组中的数据进行插入排序(值得注意的是,每个组进行插入排序时,不需要遍历每一...
也称为直接插入排序、简单插入排序等。插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间
算法要点
将一个序列中的数据分成两个部分,从前到后依次为有序序列和无序序列
遍历拿...