数据结构之查找(顺序查找、折半查找)

相关概念:
关键字:关键字是数据元素中某给数据项的值,用来标识一个数据元素(具有一定的辨识功能)。
主关键字:可以识别唯一的一个数据元素的关键字;
次关键字:能识别若干记录的关键字。
查找:给定一个值,在查找表中确定一个其关键字与给定值得数据元素(或记录)。
查找包含有一下几种操做:
1、查询某个“特定”的数据元素是否在查找表当中;
2、检索某个“特定”的数据元素的相关属性;
3、在查找中插入数据元素;
4、从查找表中删去某个数据元素;
操作分类:
静态查找:仅仅对查找表做查询和检索的操作,没有改变查找表的内容;
动态查找:在查找的过程中同时插入查找表里原本不存在的数据元素或者删除查找表中已存在的某个数据元素。
衡量一个查找算法的标准:
时间复杂度:
空间复杂度:
平均查找长度:确定记录在查找表中的位置所进行的和关键字的比较次数的平均值。
静态查找的几种查找算法:
**顺序查找:**从表中的最后一个(第一个)记录开始,逐个进行记录的关键与给定的值相互比较,如果某个记录的关键字与所给的值相等,则查找成功,如果查找直到第一个(最后一个)还没有找到与所给值相等的关键字,则查找失败。
如果每一个记录被查找的概率都为Pi=1/n,则顺序查找的平均查找长度ASL=nP1+(n-1)P2+…+2P(n-1)+Pn=(n+1)/2;
如果被查找的记录的概率不同是,则先查找概率大的记录再查找概率次之的,逐渐查找下去,如果查找的概率无法测定则再查找的过程中采用将每次查找后的结果所对应的记录移至表尾(表头,即移动到第一个被查找的位置),比如我们找搜索的时候优先把以前搜过的内容放到前面。
顺序查找的优缺点:
优点:1、简单;2、适应面广(基本对任何结构的表都无要求);
缺点:平均查找长度大,效率较低,热别是当n很大时。
折半查找:折半查找时有序表的查找方法(数据元素按照其关键字的次序,有序的存放在顺序表中)
原理:先确定待查找记录所在的范围(确定是前半部分还是后半部分),然后逐渐缩小范围,直到找到(或者找不到)该记录为止。
算法说明:
数据结构之查找(顺序查找、折半查找)
数据结构之查找(顺序查找、折半查找)
例子如下:
数据结构之查找(顺序查找、折半查找)
数据结构之查找(顺序查找、折半查找)
判定树
折半查找中,以mid作为分界点,把整个表分为上半部分和下半部分,而二叉树中以根结点为分界点,分为左子树和右子树。
有n个结点的判定树的深度为(log2N)+1,折半查找法在查找过程中进行的比较次数最多不超过(log2N)+1.
折半查找的优缺点:
折半查找的效率比顺序查找高(特别是在静态查找表的长度很长时),但是折半查找只能适用于有序表,而且是以顺序存储结构存储。