![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
主要是一些基础的算法
像向日葵一样~~
你只管努力,剩下的交给时间!
展开
-
二叉树的遍历、查找、删除
一、二叉树的概念:1、每个节点最多只有只能有两个子节点的一种称为二叉树2、二叉树的子节点分为左节点和右节点。满二叉树:如果该二叉树的所有叶子节点都在最后一层,并且节点总数=2^n-1,n为层数。完全二叉树:如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,称之为完全二叉树二、二叉树的三种遍历:前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树,再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再原创 2020-08-02 17:18:26 · 297 阅读 · 0 评论 -
赫夫曼树(哈夫曼树、霍夫曼树,最优二叉树)
赫夫曼树的实现及编码一、简介1、简介2、相关定义二、赫夫曼树算法1、算法思路2、代码实现三、赫夫曼树编码1、基本介绍2、代码实现简介:相关定义:一、简介1、简介1)给定n个权值(节点的值)作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为 赫夫曼树(哈夫曼树、霍夫曼树,最优二叉树)。2)赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近2、相关定义1、路径:从一个节点往下可以到达子节点的之间的通路;2、路径长度:通路中分支的数目。若规定跟节点所在的层原创 2020-08-02 16:38:37 · 1450 阅读 · 0 评论 -
查找算法——斐波那契(黄金分割法)查找算法
基本介绍:黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位 数字的近似值是 0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神 奇的数字,会带来意向不大的效果。斐波那契数列{1,1,2,3,5,8,13,21,34,55}发现斐波那契数列的两个相邻数的比例,无限接近黄金分割值 0.618。斐波那契分割法原理:斐波那契查找原理与前两种相似,仅仅改变了中间结点(mid)的位置,mid 不再是中间或插值得到,而是位于黄原创 2020-07-24 09:27:30 · 1031 阅读 · 3 评论 -
查找算法——插值查找
原理介绍:插值查找算法类似二分法查找,不同的是插值查找每次从自适应的mid值开始查找。插值插值的求mid索引的公式:int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left])插值查找也要求数组必须是有序数组。代码实现:package DataStructures.com.test.Search;import java.util.Arrays;/** * 插值查找算法 */pub原创 2020-07-24 09:01:41 · 133 阅读 · 0 评论 -
查找算法——二分查找
思路二分查找适用于在一个有序数组 arr 中查找某个值(findValue)。首先确定该数组的中间下标mid=(left+right)/2;然后让findValue与arr[mid]比较如果findValue>arr[mid],说明你要查找的数在mid的右边,需要向右查找(递归查找)。如果findValue<arr[mid],说明你要查找的数在mid的左边,需要向左查找(递归查找)。如果findValue=arr[mid],说明找到,直接返回下标mid。什么时候结束递归:1原创 2020-07-23 22:11:15 · 97 阅读 · 0 评论 -
(排序算法五)快速排序
基本思想:快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两 部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排 序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。时间复杂度&&空间复杂度&&稳定性时间复杂度:O(n log n)空间复杂度 :O(log n)稳定性:不稳定图文分析:原始数组:arr=[2,10,8,3,6,4,1];代码实现:原创 2020-07-18 10:34:12 · 172 阅读 · 0 评论 -
(排序算法四)希尔排序
基本介绍:希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。基本思想:希尔排序法基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止时间复杂度&&空间复杂度&&稳定性时间复杂度:O(n log n)空间复杂度 :O(1)原创 2020-07-17 17:45:43 · 155 阅读 · 0 评论 -
(排序算法三)基数排序
基本介绍:基数排序(radixsort)属于“分配式排序”(distributionsort),又称“桶子法”(bucketsort)或binsort,顾 名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法基数排序(RadixSort)是桶排序的扩展基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。基本思想:将所有待比较数据统一为原创 2020-07-17 11:08:47 · 273 阅读 · 0 评论 -
(排序算法二)选择算法
基本介绍:选择排序也属于内部排序,是从待排序的数据中,按照指定规则选出某一元素,再按规定交换位置后达到排序的目的。排序思想:第一次从 arr[0]~arr[n-1]中选取最小值,与 arr[0]交换。第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换。第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…。第 i 次从 arr[i-1]~arr[n-1]中选取最小值,与 arr[i-1]交换,…。第 n-1 次从 arr[n-2]~arr[n原创 2020-07-15 10:05:07 · 111 阅读 · 0 评论 -
(排序算法一)冒泡排序
冒泡排序基本介绍:冒泡排序的基本思想是:通过对待排序的序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使得较大的元素从前移向后,就像水底的气泡一样冒上来。时间复杂度:冒泡排序的平均时间复杂度是O(n^2);优化:在排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有交换,那就说明队列有序,排序过程中可以设置一个flag判断元素是否经过交换,从而减少不必要的比较,达到优化的目的。演示冒泡过程的例子:原始数组:int[] arr={3,9,-1,10,2原创 2020-07-14 21:49:30 · 118 阅读 · 0 评论