1、顺序查找的查找表的数据结构
typedef struct{
Elemtype *elem;
int TableLen; //表的长度
}SeqList;
2、顺序查找的主要代码
//一般线性表的顺序查找
int Search_Seq(SSTable ST,ElemType key)
{
ST.elem[0]=key; //0号元素放关键字,哨兵
for(int i=ST.TableLen;ST.elem[i]!=key;i--)
{
return i;
}
}
其时间复杂度为O(n);其对于顺序表和链表都适用。
3、折半查找的查找表的数据结构
typedef struct{
Elemtype *elem;
int TableLen; //表的长度
}SSTable;
4、折半查找的主要代码(对于升序的顺序表)
//折半查找
int Binary_Search(SeqList L,ElemType key)
{
int low=0,high=L.TableLen-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;
}
其时间复杂度为O(logn);但是其只能对于有序的顺序表,因为链表不具备随机存储的特性。折半查找的过程是一棵平衡二叉树。
如果当前Low和high之间的元素个数是奇数个,则左右两边元素个数相等,否则就是左半部分比右半部分少一个元素(针对于mid=(low+high)/2,也即是向下取整时,若向上取整,则相反)。