white camel
星光不问赶路人, 时光不负有心人
展开
-
《恋上数据结构与算法》排序(六):快速排序
参考 :https://blog.youkuaiyun.com/weixin_43734095/article/details/105156039https://morris131.blog.youkuaiyun.com/article/details/107444604https://juejin.cn/post/6844904095250120718一、经典十大排序算法快速排序快速排序(Quick Sort)是对冒泡排序的一种改进,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数。.原创 2021-01-13 17:02:18 · 404 阅读 · 0 评论 -
MySQL的索引底层为何使用 B+树?B树和B+树有哪些区别? 硬盘结构介绍、操作系统读取硬盘数据的过程、什么是IO操作?
相关文章 : MySQL 索引底层为什么选择B+Tree一、B+树介绍B+树是B树的变体,常用于 数据库和操作系统的文件系统 中MySQL数据库的索引就是基于B+树实现的B+树的特点:分为 内部节点(非叶子)、叶子节点 两种节点内部节点 只存储key, 不存储具体数据叶子节点 存储key(索引列) 和 具体数据(每一条记录)所有的叶子节点形成一条有序链表 (B树的叶子节点没有链)m阶B+树非根节点的元素数量 x:┌ m/2 ┐ ≤ x ≤ mMySQL中的B+T.原创 2021-01-10 15:51:16 · 1237 阅读 · 0 评论 -
《恋上数据结构与算法》排序(五):归并排序
转载自 : https://blog.youkuaiyun.com/weixin_43734095/article/details/105127138相关 : https://juejin.cn/post/6844904094235426830一、经典十大排序算法前言请务必看一下这个:排序算法前置知识+代码环境准备。当上面的内容都准备好以后,那就开始归并排序吧!归并排序归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策.转载 2021-01-07 22:47:45 · 398 阅读 · 0 评论 -
《恋上数据结构与算法》排序(四):插入排序、二分查找
目录插入排序(Insertion Sort)一、概念二、代码实现三、逆序对(Inversion)四、代码优化1、 第一种优化 (挪动优化)2、 第二种优化(二分搜索优化)2.1、 思路2.2、 实例2.3 实现二分搜索 (Binary Search)二分搜索(Binary Search)一、 概念二、 思路三、 实例四、代码实现一、经典十大排序算法插入排序(Insertion Sort)一、概念插入排序(Insertion Sortin原创 2021-01-05 10:22:01 · 364 阅读 · 0 评论 -
《恋上数据结构与算法》排序(三):堆排序
堆排序(Heap Sort)一、概念堆排序可以认为是对选择排序的一种优化。执行步骤:对序列进行原地建堆。 1. 交换堆顶与尾元素。 2. 堆的元素数量减1。 3. 对0位置进行1此siftDown操作。 * 重复执行1-3操作,直到堆的元素数量为1。 最好,最坏,平均时间复杂度:O(nlogn)。空间复杂度O(1),属于不稳定排序。二、代码实现public class HeapSort<T extends Comparable<T>> extends原创 2021-01-05 10:13:25 · 313 阅读 · 0 评论 -
《恋上数据结构与算法》排序(二):选择排序
选择排序(Selection Sort)1、概念从序列中找出最大/最小的那个元素,然后与最后面/前面的元素交换位置。执行完一轮后,最后面/前面的那个元素就是最大的元素。下面代码中, 通过将索引为0位置的元素当做最大元素, 然后进行循环比较, 如果发现有元素比0位置的元素要大, 此时就将该元素的索引赋值给最大元素索引(maxIndex)即可忽略上一步中曾经找到的最大元素(比较的范围就要减1),重复执行上一步。2、代码实现关于 if (array[maxIndex] <= arr原创 2021-01-03 09:04:51 · 370 阅读 · 2 评论 -
《恋上数据结构与算法》排序(一):冒泡排序
一、经典十大排序算法冒泡排序(Bubble Sort)一、概念从头开始比较每一对相邻元素,如果第一个比第二个大,就交换它们的位置。执行完一轮后,最末尾那个元素就是最大元素。忽略上一步中曾经找到的最大元素,重复执行步骤一,直到全部元素有序。二、代码实现static void bubbleSort1(Integer[] array) { for (int end = array.length - 1; end > 0; end--) { for (int beg原创 2020-12-28 22:01:39 · 380 阅读 · 0 评论 -
《恋上数据结构与算法》笔记(十六):HashMap、HashSet、LinkedHashMap、LinkendHashSet
1原创 2020-12-28 10:54:39 · 391 阅读 · 0 评论 -
《恋上数据结构与算法》笔记(十七):优先级队列 (二叉堆实现)
一、优先级队列(Priority Queue)队列相关的链接 : 队列普通的队列是先进先出原则。优先级队列是按照优先级高低进行出队,比如将优先级最高的元素作为队头优先出队。使用场景:医院急诊根据病人病情和挂号时间决定谁先看病。操作系统的多任务调度,队列元素是任务,优先级是任务类型。二、优先级队列(Priority Queue)底层实现通过最大堆来实现优先级队列。public class PriorityQueue<E> { private Binar原创 2020-12-27 11:44:06 · 295 阅读 · 1 评论 -
《恋上数据结构与算法》笔记(十六):二叉堆
目录一、二叉堆(Heap)1、问题2、二叉堆概念3、堆的接口设计二、二叉堆(Binary Heap)三、二叉堆(Binary Heap)接口实现1、构造方法2、添加3、删除4、replace操作5、批量建堆6、TopK问题四、leetcode算法题五、二叉堆代码(完整)一、二叉堆(Heap)1、问题设计一种数据结构,用来存放整数,要求提3个接口。添加元素获取最大值删除最大值更优秀的数据结构:堆,获取最大值复杂度O(1),删除最大值O(l原创 2020-12-27 11:23:52 · 538 阅读 · 1 评论 -
小码哥《恋上数据结构与算法》笔记(十五):哈希表(Hash Table)、哈希函数、哈希冲突、HashCode和Equals方法详解
目录具体代码在 : RBTree, 欢迎star一、哈希表(Hash Table)1、概念2、哈希冲突3、JDK1.8的哈希冲突解决方案4、哈希函数5、如何生成hash_code(key)5.1、整数的哈希值5.2、浮点数的哈希值5.2、Long和Double的哈希值5.3、字符串的哈希值5.4、自定义对象的哈希值5.5、自定义对象存储举例6、hashCode和equals方法 (重点)2.2.4 添加-修复性质4-上溢-RR2.2.5 添加-修复性质4-上原创 2020-12-12 01:43:09 · 711 阅读 · 1 评论 -
《恋上数据结构与算法》笔记(十四):集合 (Set) 和 映射 (Map)、TreeSet、TreeMap实现
一、集合(Set)二、集合的接口设计三、集合的实现1、通过链表实现集合2、通过红黑树实现集合四、映射(Map)五、映射的接口设计六、映射的实现(TreeMap)1、声明节点2、put函数实现3、get函数实现4、remove函数实现5、contains函数实现6、traversal函数实现七、leetcode算法题...原创 2020-12-11 17:05:39 · 406 阅读 · 1 评论 -
《恋上数据结构与算法》笔记(十三):红黑树
目录具体代码在 : RBTree, 欢迎star一、红黑树(Red Black Tree)1、初识红黑树2、红黑树的等价变化3、红黑树 vs 2-3-4树4、红黑树节点关系二、红黑树的实现1、构造方法2、添加2.1 parent为BLACK2.2 parent为RED(Double Red)2.2.1 添加-修复性质4-LL\RR2.2.2 添加-修复性质4-LR\RL2.2.3 添加-修复性质4-上溢-LL2.2.4 添加-修复性质4-上溢-RR2.2.原创 2020-12-08 00:34:22 · 616 阅读 · 1 评论 -
《恋上数据结构与算法》笔记(十二):B树 (平衡的多路搜索树)
目录一、B树性质1、初识B树2、m阶B树的性质(m >= 2)3、B树 与 二叉搜索树二、B树的操作1、搜索2、添加3、上溢4、上溢的解决5、添加导致上溢的例子6、删除7、下溢8、下溢的解决三、4阶B树一、B树性质1、初识B树B树是一种平衡的多路搜索树,多用于文件系统,数据库(MySQL)的实现。B树特点:一个节点可以存储超过2个元素,可以拥有超过2个子节点。拥有二叉树的一些性质。平衡,每个节点的所有子树高度一致。比较矮。2、m原创 2020-11-27 00:12:35 · 721 阅读 · 1 评论 -
《恋上数据结构与算法》笔记(十一):平衡二叉搜索树 (AVL树)
目录一、平衡二叉搜索树(Balance Binary Search Tree)1、退化成链表的二插搜索树2、平衡(Balance)3、如何改进二叉搜索树?4、常见的平衡二叉搜索树3、节点值的比较方式4、删除元素四、二叉搜索树的遍历1、前序遍历2、中序遍历3、后序遍历4、层序遍历5、外界遍历后, 自定义处理遍历结果6、树状打印二叉树一、平衡二叉搜索树(Balance Binary Search Tree)1、退化成链表的二插搜索树如果是按照7、原创 2020-11-24 22:35:30 · 424 阅读 · 0 评论 -
《恋上数据结构与算法》笔记(十):二叉搜索树 III (重构二叉排序树)
具体实现细节请先看 : 二叉搜索树 I 、二叉搜索树 II说明: 下图的文件在代码中涉及但这里不提供!1、二叉排序树(重构前)BinarySearchTreepackage com.zy;import com.zy.printer.BinaryTreeInfo;import java.util.LinkedList;import java.util.Queue;/** * Description: 二叉排序树(二叉搜索树)实现 * * @author guizy * @d.原创 2020-11-17 00:23:07 · 353 阅读 · 0 评论 -
《恋上数据结构与算法》笔记(九):二叉搜索树 II
由于篇幅, 此篇和上篇文章无缝衔接 : 二叉搜索树 I五、二叉搜索树练习1、计算二叉搜索树的高度思路:递归方式: 因为我们发现根节点的高度就是整课二叉树的高度; 根节点的高度 = Math.max(其左右子树的高度) + 1;迭代方式: 通过层序遍历我们可以发现, 当每一层遍历完之后我们就对定义的height++, 这样就可以计算出树的高度了, 此时又出现一个问题, 怎么判断每一层节点遍历完呢, 可以发现queue.size()就是下一层的节点数量// 方式一: 递归的方式publi.原创 2020-11-17 00:12:37 · 460 阅读 · 0 评论 -
《恋上数据结构与算法》笔记(八):二叉搜索树 I、二叉搜索树的遍历
目录一、二叉搜索树(Binary Search Tree)二、二叉搜索树的接口设计三、二叉搜索树的实现1、构造函数2、节点3、添加元素4、删除元素四、二叉搜索树的遍历1、前序遍历2、中序遍历3、后序遍历4、层序遍历五、二叉搜索的前驱和后继1、前驱节点(predecessor)2、后继节点(successor)一、二叉搜索树(Binary Search Tree)二、二叉搜索树接口设计三、二叉搜索树的实现1、构造函数2、节点3、添加元素4、删除原创 2020-11-10 09:45:22 · 681 阅读 · 0 评论 -
常见查找算法
一、顺序查找二、折半查找(二分查找)基本思路: 选定这批数中居中位置的一个数 与所查数进行比较, 看是否为所找之数, 若不是,利用数据的有序性,可以决定所找的数是在选定前还是在之后, 从而很快可以将查找范围缩小一半. 以同样的方法在选定的区域进行查找,每次都会将查找范围缩小一半,从而可以快速的找到所查找之数.#define Length 10int main(){ // 创建数组 int...原创 2018-05-28 10:38:32 · 14370 阅读 · 1 评论 -
常见排序算法
排序算法的稳定性是指在待排序的序列中,存在多个相同的元素,若经过排序后这些元素的相对词序保持不变,即Xm=Xn,排序前m在n前,排序后m依然在n前,则称此时的排序算法是稳定的。先介绍一下常见的排序算法: 直接插入排序、简单选择排序、冒泡排序、快速排序这四种排序.一、直接插入排序<稳定>算法思路: 先将序列中第1个记录看成一个有序子序列, 然后从第2个记录开始,逐个进行插入,直至整个序列...原创 2018-05-27 20:03:58 · 256 阅读 · 0 评论 -
《恋上数据结构与算法》笔记(七):二叉树、满二叉树、完全二叉树
目录一、树(Tree)的基本概念1、节点2、子树3、度4、深度&高度5、树的分类二、二叉树1、二叉树的性质2、二叉树的种类a、真二叉树b、满二叉树c、完全二叉树三、leetcode算法题1、寻找完全二叉树的叶子节点一、树(Tree)的基本概念跳转到目录节点最多为两个的树叫做二叉树, 节点多余两个的树叫做多叉树。生活中的树形结构1、节点跳转到目录节点:1、2、3、4、5、6、21、22、31、51、52、61、221、原创 2020-05-28 15:59:51 · 706 阅读 · 0 评论 -
小码哥《恋上数据结构与算法》笔记(六):队列(Queue)、双端队列(Deque)、循环队列、循环双端队列(了解)
具体代码在 Queue , 欢迎 star目录一、队列(Queue)二、队列接口设计三、队列的实现四、leetcode-栈实现队列五、双端队列(Deque)六、双端队列的接口设计与实现七、循环队列(Circle Queue)八、循环队列的接口设计九、循环队列的实现1、构造方法2、入队2.1、数组扩容2.2、索引计算3、出队十、循环双端队列一、...原创 2020-04-15 19:15:21 · 682 阅读 · 0 评论 -
小码哥《恋上数据结构与算法》笔记(五):栈
具体代码在 Stack , 欢迎 star目录一、栈(Stack)二、栈接口设计三、栈的实现四、实现细节五、双向链表和动态数组比较1、有效的括号2、括号的分数3、基本计算器4、逆波兰表达式求值一、栈跳转到目录栈是一种特殊的线性表, 只能在一端进行操作。往栈中添加元素的操作,一般叫做push,入栈。从栈中移除元素的操作,一般叫做pop,出栈(只能移除栈...原创 2020-04-14 07:38:29 · 607 阅读 · 0 评论 -
小码哥《恋上数据结构与算法》笔记(四):循环链表
具体代码在 LinkedList , 欢迎 star目录一、单向循环链表(Simple LinkedList)二、单向循环链表接口设计三、单向循环链表的实现1、插入结点2、删除结点3、清空结点4、插入结点 (重点)5、删除结点6、测试双向链表六、双向链表和动态数组比较一、单向循环链表尾结点的next,指向头结点。二、单向循环链表接口设计相对于单...原创 2020-04-12 22:53:21 · 586 阅读 · 0 评论 -
小码哥《恋上数据结构与算法》笔记(三):双向链表
具体代码在 LinkedList , 欢迎 star目录一、双向链表(LinkedList)二、双向链表接口设计三、双向链表的实现1、构造方法2、查找结点3、清空结点4、插入结点 (重点)5、删除结点6、测试双向链表六、双向链表和动态数组比较一、双向链表跳转到目录单向链表只能通过Node中next属性从头遍历链表,完成搜索。双向链表中的Node增加p...原创 2020-04-09 18:29:30 · 557 阅读 · 0 评论 -
小码哥《恋上数据结构与算法》笔记(二):链表 (单链表)
目录一、链表(LinkedList)二、链表(LinkedList)接口设计三、链表的实现1、构造方法2、添加元素3、插入元素3.1、数组越界4、删除元素5、清空元素6、修改元素7、查找元素8、查找元素索引9、获取链表存储元素的个数10、链表是否为空11、判断元素是否存在12、打印链表中存储的数据10、数组是否为空----11、动态数组打印------...原创 2020-03-31 12:00:22 · 1152 阅读 · 2 评论 -
学习《恋上数据结构与算法》目录索引 (持续更新中)
写在前面:此系列为本人学习小码哥《恋上数据结构与算法》所整理的笔记,恶补一下自己的短板数据结构与算法!一、数据结构1、《恋上数据结构与算法》笔记(一):动态数组二、常见算法...原创 2020-03-28 12:32:48 · 5226 阅读 · 1 评论 -
小码哥《恋上数据结构与算法》笔记(一):动态数组
ArrayList原创 2020-03-28 12:06:05 · 2168 阅读 · 2 评论 -
数据结构与算法一一图
二、图的存储结构<邻接矩阵>三、图的存储结构<邻接表>四、图的遍历// ---------------------邻接矩阵存储结构------------------------typedef char VertexType; // 顶点类型typedef int EdgeType; // 边上的权值类型#define MAXVEX 100 // 最大顶点数...原创 2018-05-28 11:40:53 · 641 阅读 · 0 评论 -
数据结构与算法一一二叉树
二、满二叉树三、完全二叉树四、二叉树性质#include <stdio.h>#include <stdlib.h>typedef char ElemType;typedef struct BiTNode{ char data; struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;// 创建一颗二叉树:...原创 2018-05-28 11:29:01 · 342 阅读 · 0 评论 -
数据结构与算法一一递归操作
一、斐波那契数列// 迭代实现void iterationFib(){ int a[10] = {1, 1}; int len = sizeof(a) / sizeof(int); printf("%d ", a[0]); printf("%d ", a[1]); for (int i = 2; i < len; ++i) { a[i] = a[i - 1] + a[i...原创 2018-05-28 11:16:30 · 329 阅读 · 0 评论 -
数据结构与算法一一队列
链队列:循环队列:原创 2018-05-28 11:08:05 · 251 阅读 · 0 评论 -
数据结构与算法一一顺序表与单链表
一、数据结构是指数据元素的集合及元素间的相互关系和构造方法, 结构是指元素之间的关系. 在数据结构中,元素之间的相互关系称为数据的逻辑结构. 按照逻辑关系的不同将数据结构分为 线性结构和非线性结构, 线性结构包括线性表、栈、队列、串, 非线性结构包括 树、图. 数据元素及元素之间关系的存储形式称为存储结构, 可分为顺序存储和链式存储两种方式.1. 线性结构的特点是数据元素之间一种线性关系, 即数据...原创 2018-05-28 11:00:07 · 1208 阅读 · 0 评论