算法
David_lou
这个作者很懒,什么都没留下…
展开
-
《数据结构与算法》7-快排-归并排序
上一节分析了一下冒泡排序,插入排序,选择排序。时间纷杂度都是O(n^2),这一节分析一下速度较快的排序算法,归并排序和快速排序 归并排序 归并排序的思想比较简单,分而治之;把排序的数组平均分为左右两部分,递归此操作 然后对左右两部分进行排序。4,6,3,7,2,8,1,9分为两组{4,6,3,7}-{2,8,1,9}再分{4,6}-{3,7}-{2,8}-{1,9}再分4-6-3-7-2-8-1-9分解为单独的数据之后使用合并时排序4-6合并不用交换位置3-7合并原创 2020-09-21 21:04:37 · 153 阅读 · 0 评论 -
《数据结构与算法》6-排序
排序是一种对线性数据结构做的数据顺序调整,获得从大到小或者从小到大的有序的结果。比如 1 6 4 3 9 0 从小到大排序之后是 0 1 3 4 6 9 。从大到小排序的顺序是 9 6 4 3 1 0排序有很多方法,一般的排序算法的两个基本操作是比较和位移比较比较是排序的基础,如果线性表里面的数据无法相互比较大小,就没有排序的概念。上面的例子是比较的数字,开发环境中有很多场景,列表里面的数据可能是对象,有很多属性,这样的话就要开发自己指定排序的方法,或者扩展数据类型继承Comparable&l原创 2020-09-18 17:09:33 · 135 阅读 · 0 评论 -
《数据结构与算法》5-递归
递归是一种算法,算法是对计算规律对总结,递归适用于什么样的计算呢。可分解的计算,即总的计算公式可以分解为几个小的计算公式 重复性的计算,没有重复性就不能归纳出基本计算单元 有退出计算的条件,就是说到某个条件满足的时候会退出计算...原创 2020-09-17 15:56:43 · 141 阅读 · 0 评论 -
《数据结构与算法》4-队列
队列(queue)也是一种操作受限的线性表。他的操作特点是先进先出队列有头节点 队列有尾节点 入队 enQueue(T t)只能增加到尾节点 出队 T dequeue() 只能从头节点出队上面的四个特性决定了队列的先进先出性。在需要公平排队的情境下适合使用队列队列也可以根据底层实现分为两种底层是数组的顺序队列 底层是链表的链式队列顺序队列的主要构造T[] data 存储数据的数组 int size 队列的大小 int head 队列的头下标 int tail 队列...原创 2020-09-15 20:49:44 · 123 阅读 · 0 评论 -
《数据结构与算法》3-栈
栈跟数组和链表一样也是一种线性表,只有前后节点,并且一一对应。区别就是栈的操作受限,只能从一头插入元素或者删除元素。不像数组和链表可以任意读取和删除。读取的操作叫T pop插入的操作叫 push(T t)栈的底层实现可以是数组或者链表。底层是数组的栈叫顺序栈,底层是链表的栈叫链式栈顺序栈顺序栈的最大的特点是,底层使用数组存储数据。只能使用固定大小的数组,当数组容量满时,需要申请一个更大的数组(一般是1.5倍),然后原始数组的数据copy到新的数组,然后在新的数组上插入新的数据链式栈使原创 2020-09-15 13:50:02 · 219 阅读 · 0 评论 -
《数据结构与算法》2-链表
上一节我们总结了一下数组,数组的特性就是要吧数据存储在一块连续的存储块内。所以当我们知道了第一个数据的内存地址,就可以随机访问其他的数据。访问的事件复杂度是O(1)。但是数组的缺陷也比较明显:首先物理内存必须是连续的,数据量大的时候难以保证存储够用 插入删除操作相对复杂,需要做数据的复制移位。链表的出现就解决了上述问题。首先链表的基本元素是节点:Node。Node数据结构分两部分:1-数据域,用来保存数据 2-指向下一个数据的指针。上面的指针给了链表的极大扩展性:链表不需要物理存储的连续原创 2020-09-14 20:27:43 · 214 阅读 · 0 评论 -
《数据结构与算法》1-数组
大学的时候学习Java的数据结构特别的难过,各种刁钻的demo示例展示数据结构的恶心,那时候死记硬背的结果就是快速的遗忘。在工作之后,写出能运行的代码的时候就算是交工了。很少会认真思考数据结构对代码带来的影像。直到后来为了面试,经常被问到数据结构的问题才开始后悔平时没有多思考总结。知识也不会因为你的临阵磨枪给你任何奖赏。只有回国头来仔细的思考其中的原理,才可能融汇贯通,牢记心间。数据结构这门课是在Springboot 设计思想学习过程中穿插学习的内容。因为对于数据结构抱着深深的怨念,所以私认为此役一定要原创 2020-09-13 22:41:37 · 106 阅读 · 0 评论