顺序查找和折半查找
1.顺序查找
基本思想:①从头到尾(或从尾到头)逐个检查关键字是否满足给定的条件
②若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置
③若已查到表的另一端,但还没有找到符合给定条件的元素,则返回查找失败的信息
typedef struct{//查找表的数据结构(顺序表)
ElemType *elem;//动态数组基地址
int length;//表的长度
}SSTable;
int Search_Seq(SSTable ST,ElemType key){
ST.elem[0]=key;//"哨兵"
for(int i=ST.length;ST.elem[i]!=key;--i);// 从后往前找
return i;//若查找成功,返回元素下标;若查找失败,则返回0
}
2.折半查找
基本思想:①首先将给定key值与表中中间位置的元素比较,若相等,查找成功,返回该元素的存储位置
②若不等,则所需要查找的元素只能在中间元素以外的前半部分后后半部分,在缩小的范围内继续进行同样的查找
重复上述步骤,直到找到为止,或确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。
int Binary_Search(SSTable L,ElemType key){
int low=0,high=length-1,mid;
while(low<=high){
mid=(low+high)/2;//取中间位置
if(L.elem[mid]==key)
return mid;//找到,返回该元素所在位置
else if(L.elem[mid]<key)
low=mid+1;//从后半部分继续查找
else
high=mid-1;//从前半部分继续找
}
return -1;//查找失败,返回-1
}