![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
茯苓1998
这个作者很懒,什么都没留下…
展开
-
数据结构-二叉树(二)
我们用数组来实现二叉树(顺序二叉树) 二叉树的结构 用数组来存储节点 算法代码 /** * * @ClassName: TreeNode * @Description: 树的节点 * @author: fuling * @date: 2020年8月23日 下午2:24:06 */ public class TreeNode { private int id; private String ele; public TreeNode() { super(); // TOD原创 2020-08-23 17:30:22 · 88 阅读 · 0 评论 -
数据结构-二叉树(一)
用链表来实现二叉树存储结构 算法代码 /** * * @ClassName: TreeNode * @Description: 树的节点 * @author: fuling * @date: 2020年8月23日 下午2:24:06 */ public class TreeNode { private int id; private String ele; private TreeNode left; //当前节点的左节点 private TreeNode right; //当前节原创 2020-08-23 17:14:44 · 94 阅读 · 0 评论 -
数据结构-哈希表
哈希表又称为散列表,它是由数组和链表或者数组和二叉树构成,今天先来谈谈由数组和链表构成的哈希表 哈希表结构 下图是哈希表的结构:整个哈希表就是一个数组存放许多条链表(链表数组) 哈希函数 哈希表还有一个形影不离的伙伴叫哈希函数(散列函数)F,它是用来作关键字映射的。 每一个node都含有一个唯一标识关键字id,将id映射到哈希表的哪个HashList的工作就由哈希函数来完成,即F(id)->index,index为HashList在HashTable数组里的下标。哈希函数可以自己定义映射规则。 优势原创 2020-08-21 01:20:02 · 234 阅读 · 0 评论 -
算法-斐波那契查找
斐波那契查找是二分查找的一个变体,与插值查找一样,也是对二分查找中mid的重新定义与计算 首先我们来说说黄金分割点,简单的说就是:假如有一段长为l的绳子,在绳子上的某一点d切断该绳子,得到两根绳子,较长的那一根长度为为l1,较短的为l2,若l1/l = l2/l1 ≈ 0.618,那么我们称d为黄金分割点。 我们把绳子类比到数组,把点d类比到mid。也就是说,我们需要找出数组中的黄金分割点作为mid。 而斐波那契数列刚刚好是一个非常适合作为寻找黄金分割点的工具! 斐波那契数列有两个特点 f(k) = f(原创 2020-08-20 21:23:12 · 119 阅读 · 0 评论 -
算法-插值查找
插值查找是二分查找的一种变体,因此,插值查找的前提也是:待查找的数组必须是有序的! 插值查找对二分查找中mid的计算做了一些改进 传统的二分查找中对mid的计算:mid = (left + right) / 2 = left + 1/2 * (right - left) 插值查找中mid的计算:mid = left + ( (value -arr[left]) / (arr[right] - arr[left]) ) * (right - left) 其中,mid是数组的中间下标,left是数组第一个元素的原创 2020-08-20 16:17:13 · 111 阅读 · 0 评论 -
算法-二分查找
二分查找的前提是:所要查找的数组必须是有序的! 核心算法: 找到数组的中点下标mid 如果所要查找的值比mid下标对应的值小,那么要向数组的左半部分进行查找 如果所要查找的值比mid下标对应的值大,那么要向数组的右半部分进行查找 如果所要查找的值与mid下标对应的值相同,就返回mid 若所要查找的数组为空,则返回-1 递归实现上述过程(也可以用循环代替递归) 算法代码 import java.util.Arrays; public class BinarySearch { private stat原创 2020-08-20 15:19:13 · 111 阅读 · 0 评论 -
算法-基数排序的实现
基数排序是对桶排序的一个扩展,是一个典型的以空间换时间的算法,其算法的实现附带着额外的空间开销 核心算法如下:(图上收集个位那里19应该放到下标为9的桶,图片有误) 我们需要借助10个桶来完成排序(可以用二维数组,也可以用链表数组来实现) 以图上待排序的数组{135,242,192,93,345,11,24,19}为例来说明这个算法的实现过程 初始化10个桶,每个桶的容量为待排序数组长度8,用二维数组来实现 数组第一轮遍历,取出各个元素的个位数,放入相应的桶: 135取出5,放入下标为5的原创 2020-08-18 17:42:02 · 103 阅读 · 0 评论 -
算法-归并排序的实现
归并排序算法的一个基本思想就是分和治,可以参考一下下边的分解图 上半部分是“分”,我们可以利用递归来实现这样一个“分”的过程 下半部分是“治”,也就是说我们必须对被逐层”分解“的两半进行排序,首先对8和4这两半进行排序,然后是5和7,接着将有序序列4和8当成一个“一半”,5,7有序序列当成“一半”,这两半进行排序,依次类推,这样每两半经过排完序后都会形成一个有序的序列,直到排完序后只有一个完整的数组。 代码实现 public class MergeSort { private static int[原创 2020-08-18 14:41:57 · 121 阅读 · 0 评论