![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 92
程序员不穿格子衫
这个作者很懒,什么都没留下…
展开
-
数据结构与算法(十)
本系列文章的前几篇讲解了几种算法,.冒泡排序,插入排序,选择排序,但是,也许你会感觉到,这几个算法除了偶尔面试中会和面试官聊上几句,实际的编程时间,几乎没有再使用过这几个排序算法,即使真的有必要去排序一个数组,编程语言中也已经为我们内置好了排序算法,大部分编程语言中内置的是快速排序,那么这个与递归有什么关系呢? 快速排序 快速排序效率快,依赖于它的算法巧妙,首先,这里面就有一个分区的概念,分区也就是从数组中选取一个值,把它当作一个分界点,我们为了好讲解,与读者约定一下,这个分界点的值就叫它二狗子吧,开个玩笑原创 2021-06-08 11:20:05 · 83 阅读 · 0 评论 -
数据结构与算法(九)
在学习其他算法之前,我们要先看一下"递归算法",许多问题如果用递归来解,会出乎意料的简单,也就是上文中说的代码小巧精炼. 我们先来看下面的代码: 1 private void Blash () 2 { 3 Blash(); 4 } 这段代码是什么意思呢?函数自己调用了自己,那么这样下去会没完没了的调用下去,其实,函数自己调用自己就是"递归",但是这种无条件一直调用自身的递归是很危险的,也就是死循环.但是话又说回来,如果递归用的好的话,能帮我们解决一些棘手的问题. 递归还是循环? 现在我们来看一个实际的原创 2021-06-08 11:05:57 · 80 阅读 · 3 评论 -
数据结构与算法(八)
数据结构,那么怎么去理解这个数据结构这4个字呢,从某种角度来说,就是这一长串数据集合的特性,约束条件.之前的文章中我们对于数据结构的讨论,都会说它的时间复杂度,也就是使用某个数据结构的性能,这里我们还是一样,掌握了多种数据结构,有助于简化代码,提高代码可读性. 栈与队列 从本质上来说,栈与队列就是有了特殊限制的数组,栈与队列一般处理临时的数据, 比如在游戏中,一些消息的推送就是存放在队列中. 栈 就像前面说的,栈存取数据的方式和数组一样,也是在内存中开辟一段连续的空间来存放数据,但是相对于数组来言,它有以下原创 2021-06-08 10:55:04 · 74 阅读 · 0 评论 -
数据结构与算法(七)
也许你开始疑惑,明明是数据结构和算法,为什么只有第一篇文章介绍了数组,然后就一直在介绍算法,别急,这篇文章就是来介绍第二个数据结构的。 字典 在不同的编程语言中,字典有许多其他的名称,比如“散列表”,“映射”,“关联数组”等。 首先,来看为什么会叫“散列表”,给你以下的 字母-数字 对应关系: A=1 B=2 C=3 D=4 E=5 F=6 G=7 然后给你一串字母“ACE”,那么你立马就会知道这串字母等于135。此过程可以说成解码,或者说成是翻译的过程,这个过程就是散列,上面的A=1,B=2,这样的对应的原创 2021-06-08 09:47:31 · 87 阅读 · 0 评论 -
数据结构与算法(六)
之前的文章告诉你,在使用大O记法的时候,考虑的是最坏的情况,因为在一般逻辑中,最坏的情况下都考虑到了,那么还有什么情况比最坏的情况还坏呢?但是本文告诉你,只考虑到最坏的情况仍然不是最健全的做法,有时候全面分析也是十分有必要的. 插入排序 前文中已经介绍了2种算法,冒泡排序和选择排序,二者的时间复杂度都是O(N^2),但是选择排序比冒泡排序快了近一倍.也知道大O记法忽略常数的做法,看似相同的时间复杂度但是它们内部的运行步数有很大的差别.所以,你有2个相同的复杂度的算法,建议还是要深入代码块中好好看看哪里可以优原创 2021-06-07 21:35:37 · 93 阅读 · 0 评论 -
数据结构与算法(五)
大O记法是一个判断算法好坏的一个利器,但是在某些时候,虽然大O记法表现的是一样的,但是它们的速度一个要比另一个要快的多. 本文就会介绍一种算法,虽然大O记法一样,但是速度比之前的冒泡排序算法快的多. 选择排序 上篇文章介绍过,冒泡排序的时间复杂度是O(N^2 ),那么先来学习选择排序的算法,然后再写出选择排序的时间复杂度.我们先来简单复习上篇文章的内容,其实对于排序算法,程序只不过做了2个操作,一个是比较,还有一个是交换.如果是2层循环嵌套,那么时间复杂度就是O(N^2).那么问题来了,时间复杂度一样,那这原创 2021-06-07 21:28:03 · 73 阅读 · 0 评论 -
数据结构与算法(四)
大O记法能客观的衡量各种算法的时间复杂度,是比较各个算法好坏的利器.比如上篇文章中介绍的二分查找的时间复杂度O(logN)就比线性查找O(N)快得多. 当你通过大O发现算法很慢时,记得要从数据结构,算法想想应该怎么去优化它,毕竟我们敲代码的,要对代码有敬畏之心,战战兢兢,如履薄冰. 下面我们通过一个实例来讲解具体的问题,如何分析时间复杂度以及如何来优化. 冒泡排序 其实只要你稍微懂一点编程的人,不管是不是在学校学的,第一个排序算法肯定是冒泡排序,因为它很好懂,一般入门的教学就会教这个,这里我不会花大篇幅去讲原创 2021-06-07 21:11:29 · 64 阅读 · 0 评论 -
数据结构与算法(三)
上篇文章中介绍,算法的好坏主要是看完成这个步骤所需要的步数.比如说在 有序数组中插入的效率低,但是查找却很快 常规数组中插入的效率高,反之查找却很慢 当我们在记录这个算法的步骤的时候,不能写出“一个长度为N的有序数组中用二分查找需要的步骤为XX步”.这样写不仅浪费时间又啰嗦,这是我们不想要的,那么有什么办法简洁明了的表示算法的步数的呢? 大O记法 大O记法用来表示操作数据的算法时间复杂度,这里需要多说一句,虽然名字叫"时间复杂度"但是这里所说的并不代表时间,指的仍旧是操作的步数.为什么呢?因为在不同硬件配置原创 2021-06-07 20:49:47 · 69 阅读 · 0 评论 -
数据结构与算法(一)
其实我们编程基本上就是在和数据打交道 int ,string ,GameObject等等数据类型… 数据结构是什么呢? 数据结构就是指数据的组织形式 string Str1 = "Hello"; string Str2 = "Unity"; Debug.Log (Str1+","+Str2); Str1与Str2变量引用着不同的字符串.变量的顺序影响着输出结果. 但是,数据结构不仅仅用于组织数据,它极大的影响代码的速度,当我们采用合适的数据结构将会大大提高程序的运行速度,相反采用不合适的数据结构程序会被托原创 2021-06-07 20:11:36 · 182 阅读 · 0 评论 -
数据结构与算法(二)
上篇文章介绍了两种数据结构,数组与集合,集合与数组特性基本相同,不同的是集合中的元素是不能相同的.所以在执行插入的时候,集合比数组多了一步"查重"的操作,这是一个遍历所有元素的操作,这是一个很优秀的特性,比如你列了一个单子去超市买东西,你当然不想买重复的东西. 算法为何重要 虽然数组与集合数据结构相似,但是在高负荷的环境下它们的性能也可能表现的天差地别.为什么呢?因为除了数据结构影响性能之外还有一个重要的因素也影响这程序的性能,那就是算法. 算法,指的是解决某个问题的办法,也有的说是解决问题的一套流程. 比原创 2021-06-07 20:38:44 · 75 阅读 · 0 评论