
数据结构和算法
mqy1023
https://github.com/mqy1023
展开
-
【数据结构和算法】—— 1.选择排序、插入排序
O(n^2)排序算法之选择排序1、实现思路: 从最左边下标开始,将该下标的元素和它右边所有元素比较,每一趟遍历找出最小元素的下标,然后将最小下标的元素和该下标元素互换,即每一趟遍历都将最小值放在开始遍历的最左的下标位置2、int类型数组的选择排序算法package com.algorithm.demo;/** * * @author eric * 从最左边下标开始,将该下标的元素和它右原创 2017-07-11 19:05:12 · 503 阅读 · 0 评论 -
【数据结构】—— 6、优先队列和堆
1、优先队列优先队列和其实是队列的一种普通队列:先进先出;后进先出优先队列:出队顺序和入队顺序无关;和优先级相关2、堆堆本身也是一棵树,其实堆也有很多种,我们在这里主要使用二叉树来表示堆,说白了,二叉堆就是满足一些特殊性质的二叉树:二叉堆是一棵完全二叉树堆中某个节点的值总是不大于其父节点的值(所以也叫做最大堆),注意:层次大的元素值不一定小于层次小的元素满二叉树:...原创 2019-07-05 20:31:04 · 212 阅读 · 0 评论 -
【数据结构】—— 10、平衡二叉树之红黑树与2-3树
红黑树的5个性质:1、每个节点或者是红色的或者是黑色的。2、根节点是黑色的。3、每一个叶子节点(最后的空节点NIL)是黑色的。4、如果一个节点是红色的,那么他的孩子节点一定是黑色的。5、从任意一个节点到叶子节点,所经过的黑色节点数量相同。一、2-3树a的左孩子值 < a,a右孩子的值 > a,在右图中可以存放两个元素b、c,该树有三个孩子,左孩子的值 < b,...原创 2019-07-09 21:24:00 · 408 阅读 · 0 评论 -
【数据结构】—— 5、集合和映射
之前用二分搜索树实现了集合现在使用链表实现集合LinkedList原创 2019-07-03 21:58:31 · 264 阅读 · 0 评论 -
【数据结构】—— 9、平衡二叉树之AVL树
满二叉数:除了叶子节点,其余节点都有左右子树平衡二叉树:任意一个节点的左子树和右子树的高度差不超过1平衡二叉树的高度和节点数量之间的关系也是O(log n)一、计算节点的高度和平衡因子节点加一个height值,标识节点的高度计算平衡因子(左右高度差绝对值,平衡二叉树要满足这个绝对值不能大于1)二、检查二分搜索树性质和平衡性1、二分搜索树:每个节点的左子树的值都小于该节点...原创 2019-07-08 23:47:21 · 319 阅读 · 0 评论 -
【数据结构】—— 4、二分搜索树
将数据使用树结构存储后,出奇的高效二分搜索树(Binary Search Tree)平衡二叉树:AVL;红黑树堆;并查集线段数;Trie(字典数,前缀树)二叉树和链表一样 ,动态数据结构class Node { E e; Node left; // 左孩子 Node right; // 右孩子}二叉树具有唯一的根节点左孩子 右孩子二叉树中每个节点最多有两个孩子...原创 2019-07-02 21:21:33 · 188 阅读 · 0 评论 -
【数据结构】—— 8、Trie字典树
一、什么是Trie字典树Trie字典树(主要用于存储字符串)查找速度主要和它的元素(字符串)的长度相关[O(w)]。Trie字典树主要用于存储字符串,Trie 的每个 Node 保存一个字符。用链表来描述的话,就是一个字符串就是一个链表。每个Node都保存了它的所有子节点。使用场景:通讯录高效搜索,专为处理字符串设计的。比如字典中有n条数据,如果使用树结构,查询的时间复杂度是O(logn)...原创 2019-07-07 16:40:30 · 333 阅读 · 0 评论 -
【数据结构】—— 3、链表和递归
【数据结构】—— 3、链表原创 2018-11-02 23:39:34 · 226 阅读 · 0 评论 -
【数据结构】—— 2、栈和队列
一、栈1、栈也是一种线性结构2、相比数组,队列对应的操作是数组的子集3、只能从一端(栈顶)添加元素,也只能从这一端(栈顶)取出元素4、栈是一种后进先出的数据结构(Last In First Out【LIFO】)栈的基本实现代码二、队列1、队列也是一种线性结构2、相比数组,队列对应的操作是数组的子集3、只能从一端(队尾)添加元素,只能从另一端(队首)取出元素出队要让队列"...原创 2018-10-30 22:57:14 · 169 阅读 · 1 评论 -
【数据结构】—— 1、不要小瞧数组
2-1、 使用Java中的数组2-2 二次封装属于我们自己的数组2-3 向数组中添加元素2-4 数组中查询元素和修改元素2-5 包含,搜索和删除2-6 使用泛型2-7 动态数组2-8 简单的复杂度分析2-9 均摊复杂度和防止复杂度的震荡// Array.javapublic class Array<E> { private E[] data; ...原创 2018-10-30 20:46:22 · 236 阅读 · 0 评论 -
【数据结构】—— 7、线段树(区间树)
为什么要使用线段树?实质 : 基于区间的统计查询一个节点存储的是一个区间相应的和public class SegmentTree<E> { private E[] tree; private E[] data; private Merger<E> merger; public SegmentTree(E[] arr) { ...原创 2019-07-06 14:08:08 · 304 阅读 · 0 评论