![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法之美
数据结构和算法是程序的基础
偶像来了
这个作者很懒,什么都没留下…
展开
-
(9)冒泡排序
文章目录介绍优化代码介绍冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让他俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。优化当某次冒泡操作已经没有数据交换时,说明已经达到安全有序,不用再继续执行后续的冒泡操作。代码// 冒泡排序,a 表示数组,n 表示数组大小publ...原创 2020-01-13 15:04:30 · 668 阅读 · 0 评论 -
(1)基础
文章目录定义数据结构和算法的关系复杂度分析常用数据结构常用算法定义数据结构:指一组数据的存储结构算法:操作数据的一组方法数据结构和算法的关系数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。复杂度分析复杂度分析是数据结构和算法的精髓。数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是...原创 2019-09-17 11:25:29 · 130 阅读 · 1 评论 -
(2)复杂度分析
文章目录事后统计法大O复杂度表示法时间复杂度分析几种常见时间复杂度最好情况时间复杂度最坏情况时间复杂度平均情况时间复杂度均摊时间复杂度事后统计法将代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。但是这种方法有非常大的局限性测试结果非常依赖测试环境;测试结果受数据规模的影响很大;大O复杂度表示法算法的执行效率,粗略的讲,就是算法代码执行的时间。T(n)=O(...原创 2019-09-17 15:32:24 · 149 阅读 · 0 评论 -
(3)数组
文章目录定义线性表非线性表数组和链表的区别定义数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。数组、链表、栈、队列等也是线性表结构。非线性表非线性表中,数据之间并不是简单的前后关系,比如二叉树、堆、图等。数组和链表的区别数组是支持随机访问,根据下标随机访问的时间复杂...原创 2019-09-17 16:25:21 · 216 阅读 · 1 评论 -
(4)链表
文章目录定义定义原创 2019-09-18 18:49:19 · 109 阅读 · 0 评论 -
(5)栈
文章目录定义分类定义栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。后进者先出,先进者后出,这就是典型的栈结构。分类用数组实现的栈,叫做顺序栈。用链表实现的栈,叫做链式栈。...原创 2019-09-19 11:41:50 · 77 阅读 · 0 评论 -
(6)队列
文章目录定义额外特性队列分类和栈的区别循环队列阻塞队列定义队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。先进者先出,这就是典型的队列。额外特性队列循环队列阻塞队列并发队列分类用数组实现的队列叫做顺序队列;用链表...原创 2019-09-19 12:14:11 · 138 阅读 · 0 评论 -
(7)递归
文章目录定义理解使用递归满足的三个条件使用递归容易造成的问题定义在运行的过程中调用自己。理解所有的递归问题都可以用递推公式来表示,如下为递推公式。f(n)=f(n-1)+1 其中,f(1)=1写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。使用递归满足的三个条件一个问题的解可以分解为几个...原创 2019-09-19 14:15:40 · 105 阅读 · 0 评论 -
(8)排序基本介绍
文章目录常用排序算法分析排序算法常用排序算法冒泡排序插入排序选择排序归并排序快速排序计数排序基数排序桶排序分析排序算法排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数、低阶比较次数和交换(或移动)次数排序算法的内存消耗算法的内存消耗可以通过空间复杂度来衡量。原地排序,指空间复杂度是O(1)的排序算法。排序算法的稳定性...原创 2019-09-24 13:42:40 · 76 阅读 · 0 评论