索引查找:数据结构与算法中的高效搜索方法
发表时间: 2021-04-02 08:40
上篇文中我们介绍了顺序查找和二分查找的相关概念及实现方式,本章小编带你了解下索引查找的知识点,首先我们先来看下基本概念。
索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。
在实现索引查找算法前需要弄清楚以下三个术语。
索引查找又称为分块查找,是一种介于顺序查找和二分查找之间的一种查找方法。
索引查找的基本思想是:首先查找索引表,可用二分查找或顺序查找,然后在确定的块中进行顺序查找。
上面我们已经了解了相关的概念,下面我们再来看看具体怎么实现索引表,首先我们必须要创建主表,查找表及索引表。基本操作如下:
其中分块是为了将主表分成小块组成查找表,2,3步是建立索引表方便我们进行查找。如下图所示:
算法实现的方法如下
首先根据待查找关键字K在索引表当中定位块。定位的方法有如下几个步骤
代码实现如下:
int IndexSequelSearch(IndexType ls[], DataType s[], int m, KeyType key){ /*索引表为ls[0]-ls[m-1],顺序表为s*/ i=0; while(i<m && key>ls [i ].key) i++; /*块间查找*/ if(i==m) return -1; /*查找失败*/ else{ /*在块内顺序查找*/ j=ls[ i ].Link; while(Key!=s[j].key && j<ls[ i+1 ].Link) j++; if(key = = s[j].key) return j; /*查找成功*/ else return -1; /*查找失败*/ } }
上述代码中ls表示的是索引表就是分块后的表,s表示主顺序表
第4行确定key值在哪个索引表中
第8行取该索引表中的第一个数据
第10行在索引表中查找与key值相等的值。
本篇文章就介绍到这里,下一篇我们讲解下哈希的查找法