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