六、算法的概念和评价
1、基本概念
算法就是指对解题方案准确而又完整的描述,是一系列解决问题的清晰指令;
2、评定标准
评定标准 | 具体内容 |
时间复杂度(重点) | 主要用于描述算法的时间消耗和问题规模之间的函数关系; |
空间复杂度 | 主要用于描述算法的空间消耗和问题规模之间的函数关系; |
正确性 | 主要用于描述算法的执行结果是否满足要求; |
可读性 | 主要用于描述算法本身是否便于人们的阅读; |
健壮性 | 主要用于描述算法本身对非正常输入的处理能力; |
3、描述方式
自然语言、伪代码、流程控制图、PAD图……
七、常用的查找算法
1、线性查找算法(顺序查找算法)
1)算法流程
使用目标元素与样本数列中的第一个元素起依次进行比较,如果找到与目标元素相等的元素则表示查找成功,或者所有样本元素与目标元素都比较完毕,也没有相等的元素,则表示查找失败。
2)算法评价
平均时间复杂度O(N),不要求样本数列中的元素有序;
2、二分查找算法(折半查找算法)
1)算法流程
a.假定样本数列中的所有元素按照从小到大依次排列,使用目标元素与样本数列中的中间元素进行比较,如果相等则表示查找成功;
b.如果目标元素小于样本数列中的中间元素,则在中间元素的左边进行查找,可以使用递归处理;
c.如果目标元素大于样本数列中的中间元素,则在中间元素的右边进行查找,可以使用递归处理;
d.直到目标元素与可以比较的所有元素比较完毕,也没有找到相等的元素,则表示查找失败;
2)算法评价:
平均时间复杂度O(log2N),要求样本元素必须有序;
八、常用的排序算法
1、冒泡排序算法
1)算法流程
a.比较相邻位置的两个元素,如果第一个元素比第二个元素大,则交换两个元素的位置;
b.对每一对相邻位置的元素做同样的工作,从开始的第一对到结尾的最后一对,经过这一步,最后的元素将是这组元素中的最大值;
c.针对所有的元素重复以上步骤,除了最后一个元素;
d.持续每次对越来越少的元素重复以上步骤,直到没有元素需要交换为止;
2)算法评价
平均时间复杂度O(N^2),稳定,对样本的有序性非常敏感;
2、 插入排序算法
1)算法流程
a.首先认为第一个元素已经有序;
b.取出下一个元素,让取出的元素与已经有序的元素从后向前依次进行比较;
c.如果左边元素大于取出的元素,则将左边的元素赋值到下一个元素的位置上;
d.如果左边元素小于等于取出的元素,则将取出的元素赋值到左边元素的右边;
e.重复步骤b,直到处理完毕所有元素为止;
2)算法评价
平均时间复杂度O(N^2),稳定,对样本的有序性非常敏感,但是赋值的次数比冒泡排序次数少,因此一般情况下略优于冒泡排序算法;
3、选择排序算法
1)算法流程
a.从第一个元素起依次取出,并且假定取出的元素是最小值,使用临时变量min记录该元素的下标;
b.使用min记录的元素与后续的元素依次进行比较;
c.如果后续元素中有比min记录的元素还小的元素,则重新记录下标,也就是后续元素变成了min记录的最小值;
d.直到min记录的最小值与后续所有元素比较完毕时,交换min记录的元素与最开始假定的最小值;
e.重复以上步骤,直到处理完毕所有元素为止;
2)算法评价
平均时间复杂度O(N^2),不稳定,对样本的有序性不敏感,虽然比较次数比较多,但是交换次数比较少,因此一般情况下也是略优于冒泡排序;
4、快速排序算法
1)算法流程
a.选择中间元素作为基准值,单独保存起来;
b.分别使用左右两边的元素依次和基准值进行比较,将所有比基准值小的元素放在基准值的左边,将所有比基准值大的元素都放在基准值的右边,与基准值相等的元素可以放在任意一边,这个过程叫做分组;
c.以递归的方式对小于基准值的分组和大于基准值的分组进行再次分组,直到处理完毕所有元素为止;
2)算法评价
平均时间复杂度O(Nlog2N),不稳定,对样本的有序性不敏感;
方法二:
a. 采用先确定数字然后找位置的方法从需要处理的数字两端选择一个作为基准数字;
b. 每次把基准数字和另一端的数字进行顺序调整,直到和所有其他数字都进行过顺序调整;
c. 每次调整过顺序后就把非基准数字排除在外;