静态查找

开发工具与关键技术:算法 
作者:听民谣的老猫
撰写时间:2020.5.18

什么是查找???

在一些(有序的/无序的)数据元素中,我们通常会通过查找来找出与给定关键字相同的数据元素。也就是根据给定的某个值,在查找表中确定一个关键字等于给定值的记录或数据元素。

 

静态查找又分为哪几种???

  1. 顺序查找

从文字理解就可以知道,是给定的值依次对数据元素的关键字值进行比较。

算法代码:


int seqsearch (RecordType r,int n,Ketype k){

/*返回关键字值等于k的元素在表r中的位置,n为表中元素的个数*/

 i=n; r[0].key=k;

while(r[i].key!=k) i--;

if(i>0)

return(i); //查找成功

else

return(-1);//查找失败

}

查找成功就返回该记录的存储位置,反之,比较到最后一个数据元素,还是不满足则查找失败。

  1. 折半查找

折半查找只能在有序列表中进行。

比较笼统的来说就是1到100,你给定一个数。如果这个数>50,那你就可以排除1到50.

 

示意图:  (查找23)

也就是说每进行一次折半查找,都将查找范围缩小一半,如此重复直到查找成功或失败.

 

算法代码:

int Binsearch (RecordType r,int n,Ketype k){

/*在有序列表r中折半查找关键字值等于k的数据元素*/

int low,high,mid;

low=1;high=n;//数据的最大值,最小值

while(low<=high){

mid=(low+high)/2; //通过最大最小值取中间值

if(k==r[mid].key)

return (mid) //查找成功

else

if(k<r[mid].key)

  high=mid-1://在左半段中继续折半查找

else

  low=mid+1; //在右半段中继续折半查找

}

return (-1) //查找失败

}

  1. 分块检索

分块检索介于上面的静态,折半的查找方法。它类似于我们在字典按拼音或偏旁查找自己需要的字。

分块检索最主要的就是它怎么分块并且有序。

示意图:

这个就已经分好块了,它分块的依据是前一块中的最大关键字值必须小于后一块的最小关键字值。  比如上面的22到20和33到48这两块就满足前一块中的最大关键字值必须小于后一块的最小关键字值。它上面的1到18就是有序的索引表,索引表的建立就意味着可以采用折半或者顺序查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值