往往是事情改变人,而人却改变不了事情。
前言
算法和数据结构一直以来都是程序员的根本,他能帮我们节省大量代码,解决复杂的逻辑,同样他也是最难的,一直想学习一下算法,今天开个头。
算法大类
从网上找了很多资料,对算法的理解很多,很杂,我收集到几个关键字,①排序算法,②递归,③查找算法,④树,这些概念相互交叉,相互运用,衍生出很多复杂的算法。算法的本质就是通过简单的数据类型(数组,字符串,对象)和条件判断语句去解决某个问题或某类问题。这就有了无限的可能,所以算法很多。
排序算法
排序算法是一个大类,有冒泡排序、快速排序、选择排序、希尔排序、基数排序、等等很多,
1、冒泡排序是利用三杯水的故事,所以冒泡排序只需要一个空水杯;
2、快速排序是找中间值,然后逐个与其比较,小于它的放左边,大于它的放右边,然后连接在一起,快速排序需要三个东西,数组中间值,左边数组,右边数组,最后递归。
3、选择排序是不稳定的排序方法,它每一次都会从待排序的元素中选出最小值(或最大值),存放在数组的起始位置,直到所有的元素排完,选择排序较冒泡排序,交换次数少,但是冒泡比它稳定,它的不稳定性在于如果序列中有重复的元素,就会破坏相同元素的前后顺序。
递归算法
递归算法指的是一种通过重复将问题分解为同类的子问题而解决问题的方法。特点是在函数中调用自身,在递归过程中,必须有一个明确的条件去限制递归的结束,否则就成了死循环了。
递归算法中最经典的就是斐波那契数列吧。
还有“汉诺塔”、树形结构等等都会用到递归。
查找算法
比如我要在一个数组中查找大于某个值的数。
比如查找一个重复的值。
树
树是一种常见的数据结构,被用来存储具有层级关系的数据,比如文件系统。
最常见的就是二叉树,如下图arr=[8,3,10,1,6,14,4,7,13]。
排序二叉树的特点:
①、若子树不空,则左子树上的 所有节点的值,均小于或等于它的根节点的值;
②、若右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值;
③、左右子树分别为二叉排序树。
二叉树的遍历分三种,先序遍历,中序遍历,后序遍历。
①、先序遍历是首先访问根,再遍历访问左节点,最后访问右节点。
②、中序遍历是首先访问左节点,然后跟,最后访问右节点。
③、后序遍历是首先访问的左右节点,最后访问根。
领取专属 10元无门槛券
私享最新 技术干货