查找
- 查找表可分为两类
- 静态查找表
仅作查询和检索操作的查找表。 - 动态查找表
有时在查询之后,还需要将“查询”结果为“不在查找表中”的数据元素插入到查找表中;或者,从查找表中删除其“查询”结果为“在查找表中”的数据元素。
- 关键字
是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。
若此关键字可以识别唯一的一个记录,则称之谓“主关键字”。
若此关键字能识别若干记录,则称
之谓“次关键字”。
线性表的查找
顺序查找(都是从后往前找)
顺序查找方法既适用于线性表的顺序存储结构,又适用于线性表的链式存储结构。(无序)
时间复杂度为O(n)。
在不等概率查找的情况下,ASLss 在
Pn≥Pn-1≥···≥P2≥P1时取极小值
若查找概率无法事先测定,则查找过程采取的改进办法是,在每次查找之后,将刚刚查找到的记录直接移至表尾的位置上。
折半查找(二分查找)
折半查找要求线性表必须才用顺序存储结构,而且表中元素按关键字有序排列。
时间复杂度为O(log2 n)。
算法步骤:
- 置查找区间初值,low为1,high为表长。
- 当low小于等于high时,循环执行以下操作:
- mid取值为low和high的中间值;
- 将给定值key和中间位置记录的关键字进行比较,若相等则查找成功,返回中间位置mid;
- 若不相等则利用中间位置记录将表分为前后两个字表。如果key比中间位置记录的关键字小,则hi