赞
踩
采用顺序存储结构的数据表称为顺序表。顺序表适合作静态查找。
设有n个数据元素的顺序表,从表的一端(前端或后端)开始,用给定的值依次和表中各数据元素的关键字进行比较,若在表中找到某个数据元素的关键字和给定值相等,则查找成功,给出该数据元素在表中的位置;若查遍整个表,不存在关键字等于给定值的数据元素,则查找失败,给出失败信息。
template<class ElemType> int SqSearch(ElemType elem[],int n,ElemType key) //一般顺序查找比较 { int i; for(i=0; i<n && elem[i]!=key ;i++); if(i<n) return i; else return -1; } template<class ElemType> int SqSearch(ElemType elem[],int n) //使用哨兵elem[0],n的传入的是带上哨兵的长度 { int i; for(i=n;elem[i]!=elem[0];i--); if(i==0) return -1; else return i; }
当然,数据表也可以用链表存储如果顺序表中各个数据元素按关键字从小到大或从大到小有序排列,即为有序表,对有序表进行顺序查找,其查找失败的平均查找长度可减少,因为不需要查遍整个表就能确定表中不存在要找的数据元素。
对有序表通常可用折半查找的方法进行查找。设有n个数据元素按其关键字从小到大的顺序存放在一个顺序表中(开始时,查找区间的下限low-0,上限high=n-1)。
1)如果查找区间长度小于1(low>high)则表示查找失败,返回-1;否则继续以下步骤。
2)求出查找区间中间位置的数据元素下标mid(mid=(low+high)/2)。
3)用区间中间位置的数据元素的关键字elem[mid]与给定值key进行比较,比较的结果有以下三种可能。
在折半查找过程中,每比较一次,如果数据元素的关键字和给定值不相等,则查找区间缩小一半。直到查找区间已缩小到只有一个数据元素,如果仍未找到想要找的数据元素,则表示查找失败。
例如,设有序表为{ 8,11,23 34,39,46,68,71,86},下图展示查找关键字为23的数据元素时的查找过程。
//递归算法
template<class ElemType> int BinSearch(ElemType elem[],int low,int high,ElemType key)
{
int mid;
if(low>high)
mid=-1;//查找失败
else
{
mid=(low+high)/2;
if(key<elem[mid])//左半边继续查找
mid=BinSearch(elem,low,mid-1,key)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。