活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
…
一、算法的基本概念
算法即能够对一定规范的输入,在有限时间内获得所要求的输出。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
1、 算法的五个特征:
(1)有穷性
执行程序的运行时间是有限的,能够结束。
(2)确定性
要有明确的定义,不模棱两可。
(3)可行性
能有效地执行,并得到确定的结果。
(4)输入
算法执行时必要的数据,有些情况下,数据已经包含在算法中,算法执行时不需要任何数据,所以一个算法可以有零个或多个输入。
(5)输出
数据通过算法处理后的结果,算法必须要有一个或多个输出,没有输出的算法是毫无意义的。
2、 算法的设计的要求
(1)正确性
没有语法错误,对合法的数据输入能够产生满足要求的输出。
(2)可读性
算法要便于阅读、理解和交流
(3)健壮性
对不规范的输出的应对和处理能力。
(4)效率高和存储量低
执行时间快;占用的空间少。
3、算法的分析
(1)时间复杂度
度量执行时间的长短。算法的时间复杂度是一个函数,它定性描述该算法的运行时间。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。
(2)空间复杂度
度量执行临时占用存储空间大小。记做S(n)=O(f(n))。
为了便于后面对各种查找算法的比较,首先介绍查找的概念和术语。
1、查找表
查找表是由同一类型的数据元素 (或记录)构成的集合。由于 “集合”中的数据元素之间存
在着完全松散的关系,因此查找表是一种非常灵便的数据结构,可以利用其他的数城结构來实现。
2、关键字
关键字是数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素(或记录)。若此关键字可以唯一地标识一个记录,则称此关键字为主关键字 (对不同的记录,其主关键字均不同)。反之,称用以识別若干记录的关键字为次关键字。当数据元素只有一个数据项时,其关键字即为该数据元素的值
3、查找
查找是指根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或数据元茶。
若表中存在这样的一个记录,则称查找成功,此时查找的结果可给出;整个记录的信息,或指示该记录在查找表中的位置;若表中不存在关键字等于给定值的记录,则称查找不成功:此时查找的结果可给出一个“空”记录或“空”指针。
4、动态查找表和静态查找表
若在杳找的同时对表做修改操作(如插入或着删除),则相应的表称之为动态查找表,否则称之为静态查找表。换句话说,动态查找表的表结构本身是在查找过程中动态生成的,即在创建表时,对于给定值,若表中存在其关键字等于给定值的记录,则查找成功返回;否则插入的关键字等于给定值的记录。
顺序查找
顺序查找(Sequential Search)的查找过程为:从表的一端开始,依次将记录的关键字和给定的值进行比较,若某个记录的关键字和给定的值相等,则查找成功;反之,若扫瞄整个表后,仍未找到关键字和给定记录相等的记录,则查找失败。顺序查找的方法三个适用于线性表的顺序存储结构,有适用于线性表的链式储存结构。