从表的一端开始,依次把给定关键值与记录的关键字进行比较,逐个检查关键字会否满足给定条件。
//这里是 设置监视哨的顺序查找 版本
typedef struct{ //查找表的数据结构
ElemType *elem; //0号位置存哨兵,不用担心是否越界
int TableLen; //
}SSTable;
int Search_Seq(SSTable ST,ElemType key)
{
//在顺序表ST中查找关键字等于 key de数据元素。若找到,返回该元素在表中的值位置,否则 为0
ST.elem[0]=key; //哨兵
for(int i=ST.TableLen; ST.elem[i]!=key; — -i); //从后往前找 当 i == 0时,循环一定会跳出
return i;
}
首先将 key 与表中中间位置比较,若相等,则查找成功,返回该元素的存储位置;若不等,则在中间元素以外的前半部分或后半部分查找,然后缩小范围,重复,直至找到为止(在low所指分块中查找),或确定表中没有所需查找元素(low>high),查找失败,返回查找失败的信息。
结合思想
//在有序表L中查找关键字等于key的数据元素。若找到,返回该元素在表中的位置,否则为0
int Binary_Search(SeqList L,ElemType key)
{
int low=1,high=L.TableLen,mid;
while(low<=high)
{
mid=(low+high)/2; //取中间位置
if(L.elem[mid]==key)
return mid; //找到了待查元素
else if(L.elem[mid]>key) //继续在前一子表进行查找
high=mid-1;
else //继续在后一子表进行查找
low=mid+1;
}
return 0; 查找失败,返回0
}