一、搜索算法:
1、线性搜索:遍历所有元素从中找到等于x的值。时间复杂度为O(n)。速度慢,适用性广。
2、二进制搜索算法:一种分治算法。使用此算法时数据集首先要保持有序状态。二进制搜索算法通过比较中间项,如果匹配则返回索引。如果搜索的值大于中间项则在中间项右侧执行二进制搜索,如果小于中间项,则在左侧执行二进制搜索。时间复杂度为O(log N)。
3、深度优先搜索:
a、访问顶点v;
b、依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
c、若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。
4、广度优先搜索:BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实验里,其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。(open-closed表)
二、排序算法:
1、冒泡排序:假设有n个元素的数据集,第一个元素与第二个元素比较,小数放前面大数放后面。然后第二个元素与第三个元素比较,小数放前面大数放后面。。。比较到第n个元素得到n个元素中的最大值,然后在n-1个元素中重复以上过程,得到n-1个元素中的最大值。。。直到排序完成。时间复杂度为O(n^2)。
2、插入排序:将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。时间复杂度O(n^2)。
3、快速排序:时间复杂度:最差:O(n*logn)最优:O(logn)
a、选取一个分界值m,将大于等于m的值放在右边,小于m的值放在左边。
b、同样将左侧和右侧元素进行a操作
b、重复以上过程,通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
4、归并排序:归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分支算法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。时间复杂度O(n*logn)。
5、堆排序:1、将待排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素;2、将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆;3、重复步骤2,如此反复,从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。最后,就得到一个有序的序列了。时间复杂度O(n*logn)