算法的概念和评价以及查找算法
来源:互联网 发布:C语言经典算法实现 编辑:程序博客网 时间:2024/06/06 00:58
1.算法的概念和评价
1.1.基本概念:
算法就是指对解题方案准确而有完整的描述。
1.2.评定标准:
2.1 时间复杂度(重点):主要用于描述算法时间的消耗与问题规模之间的函数关系。
2.2 空间复杂度:主要用于描述算法空间的消耗与问题规模之间的函数关系。
2.3 正确性:主要用于描述算法的执行结果是否满足要求。编写后,才考虑,以上是编写前。
2.4 可读性:主要用于描述算法本身是否便于人们的阅读。
2.5 健壮性:主要描述算法对非正常输入的反应和处理能力。
1.3.描述方式:
目前主流的算法描述方式:自然语言、伪代码(不能执行的代码)、流程控制图、PAD图
程序员常用的算法的描述方式是自然语言、伪代码。
****************************************************************************************************************************
2.线性查找算法
2.1 线性查找算法(顺序查找算法)
(1)算法流程
使用目标元素与样本数列中的第一个元素依次比较,如果找到了与目标元素相等则表示查找成功;如果与后续的所有元素查找比较完毕,但没有找到与目标元素相等的元素,则表示查找失败。
(2)算法评价
平均时间复杂度 O(N) ,对样本的有序性不敏感
2.2 二分查找算法(折半查找法)
(1)算法流程
假定样本数列中的所有元素都是从小到大排列的,首先使用目标元素与样本数列中的中间元素进行比较,如果相等,则表示查找成功;如果目标元素小于中间元素则应该继续在中间元素的左边进行查找,如果目标元素大于中间元素则应该继续在中间元素的右边进行查找。直到查找目标元素成功,或者与后续该比较的元素全部比较完毕,则查找失败。
(2)算法评价
平均时间复杂度O(logN),要求样本数列中的元素有序;
****************************************************************************************************************************************
3.常用的排序算法
3.1 冒泡排序算法(重点)
(1)算法流程
a.比较两个相邻位置的元素大小,如果第一个元素比第二个元素大,则交换两个元素的位置;
b.对每一对相邻位置的元素做同样的工作,从开始的第一对一直到最后的一对,经过这一步,最后的元素将是这组样本元素中的最大值;
c.针对所有样本元素重复以上步骤,除了最后一个元素;
d.持续对越来越少的元素重复以上步骤,直到没有元素需要交换为止;
(2)算法评价
平均时间复杂度 O(N^2),稳定,对样本的有序性非常敏感;
3.2 插入排序算法
(1)算法流程
a.从第一个元素起,假定该元素已经有序;
b.取出下一个元素,在已经有序的数列中从后向前依次进行比较;
c.如果左边的元素大于取出的元素,则左边的元素右移,也就是赋值到下一个元素的位置;
d.如果左边的元素小于等于取出的元素,则将取出的元素插入到左边元素的右边;
e.重复第二步,直到处理完毕所有元素为止;
(2)算法评价
平均时间复杂度 O(N^2),稳定,对样本的有序性非常敏感,赋值的次数比冒泡排序少,因此一般情况下略优于冒泡排序算法;
3.3 选择排序算法
(1)算法流程
a.从第一个元素起,假定该元素是最小值,并使用变量min记录该元素的下标;
b.使用min记录的元素与后续元素依次进行比较;
c.如果找到比min记录的元素还小的元素,则修改min的值为该元素的下标;
d.重复第二步骤,直到使用min记录的元素与后续所有元素都比较完毕时,交换min记录的元素和最开始假定的元素,此时第一个元素将是这组元素中的最小值;
e.重复上述步骤,持续对越来越少的元素进行处理,直到处理完毕所有元素为止;
(2)算法评价
平均时间复杂度 O(N^2),不稳定,对样本的有序性不敏感,虽然该算法比较的次数比较多,但是交换的次数比较少,因此一般情况下略优于冒泡排序;
3.4 快速排序算法
(1)算法流程
a.选择样本数列中的中间元素作为基准值,单独保存起来
b.分别使用左右两边的元素依次和基准值进行比较,将所有比基准值小的元素放在基准值的左边,将所有大于等于基准值的元素放在基准值的右边,这个过程叫做分组;
c.以递归的方式分别对小于基准值的分组和大于基准值的分组进行再次分组,直到处理完毕所有元素为止;
(2)算法评价
平均时间复杂度 O(NlogN),不稳定,对样本的有序性不敏感。
- 算法的概念和评价以及查找算法
- 二叉查找树的概念以及实现 前序、中序和后序递归非递归遍历算法
- 常用聚类算法以及算法评价
- 常用聚类算法以及算法评价
- [数据结构与算法分析] 二叉查找树的基础概念,插入以及删除
- 在线算法和离线算法的概念
- 数据结构算法和算法效率评价
- 数据结构 和 算法 的概念
- 算法 二分查找的变种以及注意事项
- 并行算法的评价方法
- 分类算法的评价标准
- PHP:冒泡排序、快速查找和二分查找的思路以及算法
- 查找算法中的概念(排序树和散列表)
- 字符串的查找:朴素查找算法和KMP算法
- 算法和算法分析概念
- 排序算法和查找算法
- 排序算法和查找算法
- 排序算法和查找算法
- No cached version of com.android.tools.build:gradle:2.0.0 available for offline mode.
- Java第八次实验要求
- uva 10523 Very Easy !!! 大数模拟加法和乘法
- 安装Grass GIS
- eclipse中一些常见svn图标的含义
- 算法的概念和评价以及查找算法
- 那些硬着头皮去做的事,终将让你长进
- Android深入浅出之Binder机制
- 迭代(Iteration)与递归(Recursion)
- hdu 1021 - Fibonacci Again
- setUserVisibleHint()方法的懒加载
- JAVA基础知识
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- 如今仍在工作的12名最“屌”的程序员