算法整理:查找算法简单整理

来源:互联网 发布:java怎么包装简历 编辑:程序博客网 时间:2024/05/18 02:59

查找算法大致分为四种:顺序查找,二分查找,分块查找,哈希查找。

一、顺序查找】

顺序查找也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,

若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。

二、二分查找

二分查找要求线形表中的结点按关键字值升序或降序排列,用给定值k先与中间结点的关键字比较,中间结点把线形表

分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,

这样递归进行,直到查找到或查找结束发现表中没有这样的结点。

二分查找又称折半查找,它是一种效率较高的查找方法。

【二分查找要求】:1.必须采用顺序存储结构2.必须按关键字大小有序排列。【优缺点】折半查找法的优点是比较次数

少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常

变动而查找频繁的有序列表。

【算法复杂度】假设其数组长度为n,其算法复杂度为o(log(n))

三、分块查找

分块查找也称为索引查找,把线形分成若干块,在每一块中的数据元素的存储顺序是任意的,但要求块与块之间须

按关键字值的大小有序排列,还要建立一个按关键字值递增顺序排列的索引表,索引表中的一项对应线形表中的一块,

索引项包括两个内容:① 键域存放相应块的最大关键字;

② 链域存放指向本块第一个结点的指针。分块查找分两步进行,先确定待查找的结点属于哪一块,然后在块内查找结点。

分块查找又称索引顺序查找,它是顺序查找的一种改进方法。
  方法描述:将n个数据元素"按块有序"划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须

"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于

第3块中的任一元素,……。

  操作步骤:
 step1 先选取各块中的最大关键字构成一个索引表;
 step2 查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块

中用顺序法进行查找。

四、哈希表查找

哈希表查找是通过对记录的关键字值进行运算,直接求出结点的地址,是关键字到地址的直接转换方法,不用

反复比较。假设f包含n个结点,Ri为其中某个结点(1≤i≤n),keyi是其关键字值,在keyi与Ri的地址之间建立某种函数关系,

可以通过这个函数把关键字值转换成相应结点的地址,

有:addr(Ri)=H(keyi),addr(Ri)为哈希函数。

0 0
原创粉丝点击