图解算法读书笔记
1.一些常见的大O运行时间
O(log n)也叫对数时间,这样的算法包括二分查找
O(n)也叫线性时间,这样的算法包括简单查找
O(n*log n)也叫对数时间,这样的算法包括快速排序,较快
O(n²)也叫对数时间,这样的算法包括选择排序,较慢
O(n!)非常慢
算法的速度指的并非是时间,而是操作数的增速
讨论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加
##2.链表与数组
数组在内存中的空间是连续的。
就是像是一个一个横向紧邻有标号的格子。
好处是:读取第n个数很方便,打开对应的标n的格子就行,时间复杂度为O(1)。
坏处:临时插入需要另外的转移数据,插入的成本为O(n)。可以在定义数组时,多定义一些格子(内存);删除元素需要将后面的元素前移。
链表的内存空间不是连续的。
一个格子里存的是下一个的地址
好处:插入数据很方便,临时加入数字不需要转移数据;删除元素只要改变前一个元素指向的地址即可
坏处:读取第n个数需要先读取前面的n-1个数;
选择排序
比如:2,3,6,7,4,1,9,10
首先在整个数列找最大的数10,然后在剩下的数据中找最大的数9,…直到倒数第二的3,倒数第一的2
该算法的时间复杂度为O(n²)
总结:
计算机的内存犹如一大堆抽屉
需要存储多个元素时,可使用数组或链表
数组的元素都在一起
链表的元素时分开的,其中每个元素都存储了下一个元素的地址
数组的读取很快
链表的插入和删除速度很快
在同一个数组中,所有元素的类型都必须相同(都为int,double等)