简单顺序查找
线性表查找相关结构、参数定义
#define MaxLen 100
typedef int keyType;
typedef struct elementType
{
keyType key;
} elementType;
int listLen=0;
从左往右顺序查找
int SeqSearch( elementType A[], keyType x )
{
int i;
for(i=0;i<listLen;i++)
{
if(A[i].key==x)
return i;
}
return -1;
}
从右往左顺序查找
int SeqSearchRL( elementType A[], keyType x )
{
int i;
for(i=listLen-1;i>=0;i--)
{
if(A[i].key==x)
return i;
}
return -1;
}
带监视哨从右往左顺序查找
int SeqSearchSentry( elementType A[], keyType x )
{
int i;
A[0].key=x;
for(i=listLen; A[i].key!=x; i--);
return i;
}
带监视哨从左往右查找
int SeqSearchSentryLR( elementType A[], keyType x )
{
int i;
A[listLen].key=x;
i=0;
while(A[i].key!=x)
i++;
return i;
}
二分查找
非递归的二分查找
int BiSearch(elementType A[], keyType x)
{
int mid;
int low,high;
low=0;
high=listLen-1;
while(low<=high)
{
mid=(low+high)/2;
if(A[mid].key==x)
return mid;
else if(x<A[mid].key)
high=mid-1;
else
low=mid+1;
}
return -1;
}
递归的二分查找
int BiSearchR(elementType A[], keyType x, int low, int high)
{
int mid;
mid=(low+high)/2;
if(low>high)
return -1;
else if(A[mid].key==x)
return mid;
else if(x<A[mid].key)
return BiSearchR(A,x,low,mid-1);
else
return BiSearchR(A,x,mid+1,high);
}