![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
小技工丨
所有的等待终将有所归属
展开
-
排序——冒泡排序、插入排序、选择排序(java实现)
说在前面除了时间、空间复杂度之外,排序算法还有另外两个概念:原地排序:是指空间复杂度为O(1)的排序算法;稳定排序(排序的稳定性):是指在待排序序列中存在相等值,经过排序后,相等值之间的原有顺序不变,即是稳定排序;冒泡排序思路包含两个操作原子,比较和交换,可以理解一次冒泡就是一轮比较和交换;一次冒泡至少移动一个元素到应该在的位置,每次冒泡结束,下次冒泡的元素个数减1;冒泡只操作相邻的两个数据,每次冒泡不停地对相邻的两个元素进行比较,满足大小要求就进行交换,重复n次完成n个数据的排序;**原创 2020-06-12 20:46:39 · 204 阅读 · 0 评论 -
递归——很常见的一种编程技巧
什么是递归?(what)递归时一种应用广泛的算法(或者编程技巧),很多算法的编码实现都要用到递归,比如DFS深度优先搜索、前中后序二叉树遍历等;所有的递归问题都可以用递推公式来表达:f(n)=f(n-1)+a,f(1)=b;-递归就是函数调用函数本身,函数有返回值,并在一定条件下终止调用一层层返回。递归,函数调用自身:递 ,函数有返回值:归;为什么用递归?(why)优点:代码表达力强,简洁;缺点:空间复杂度高,有堆栈溢出风险,存在重复计算可能,以及过多的函数调用会比较耗时;什么样的问题用原创 2020-06-08 15:54:18 · 724 阅读 · 0 评论 -
队列——也是一种操作受限的线性表数据结构
队列先进先出,后进后出和栈的入栈push、出栈pop类似,队列提供入队enqueue、出队dequeue两种操作,也是一种操作受限的线性表数据结构常用:循环队列、阻塞队列、并发队列基于数组:顺序队列基于链表:链式队列顺序队列//java实现一个顺序队列public class ArrayQueue{ private String[] items; //数组大小 private int n = 0; private int head = 0; private int tail原创 2020-06-06 08:16:09 · 1840 阅读 · 1 评论 -
链表——单链表常见的五种操作
带头链表,单链表的常见操作原创 2020-05-31 20:25:32 · 534 阅读 · 0 评论 -
栈——一种操作受限的线性表
栈、队列、堆以及树都是在数组或者链表的基础上加入了特定的属性和操作限制的,适应不同场景的 应用型的数据结构。原创 2020-05-31 18:56:11 · 4145 阅读 · 2 评论 -
链表——Java实现链表反转的两种方法
链表反转:原地反转,头插法反转原创 2020-05-30 11:19:00 · 2801 阅读 · 0 评论 -
链表——怎么写出正确的链表?
写链表代码是最考验逻辑思维能力的,稍有不慎就容易出问题。原创 2020-05-28 19:18:23 · 1132 阅读 · 0 评论 -
数组——为什么下标从0开始呢?
数组应该是最基础、最简单的数据结构了。数组用一块连续的内存空间,来存储相同类型的一组数据,最大的特点就是支持随机访问时间复杂度为O(1),但插入、删除操作也因用的是一块连续的内存空间而变得比较低效,平均情况时间复杂度为 O(n)。原创 2020-05-24 18:15:29 · 1308 阅读 · 0 评论 -
算法复杂度分析,大O表示法
复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。大O时间复杂度表示法,表示代码执行时间(或占用空间)随数据规模增长的变化趋势。时间复杂度代码执行时间与每行代码执行次数成正比,T(n)=O(f(n)),T(n)表示代码执行的时间,n表示数据规模大小,f(n)表示每行代码执行次数总和,大O表示代码执行时间随数据规模增长的变化趋势。例如:T(n)=O(2n+1)或者T(n)=O(2n2+2n+3),公式中低阶、常量、系数三部分并不会左右增长趋势,可以忽略,所以大O表示法只要取f(n)中最.原创 2020-05-24 00:02:59 · 1221 阅读 · 0 评论