最近阅读到线性表上查找算法的有关章节,对简单的线性表上的查找比较如下:
顺序查找:存储结构为顺序存储和链式存储;优点是算法简单,对表无任何要求;缺点是查找效率低;适用范围是适用于n较小的表查找;
/*顺序表上的查找,顺序查找,SqList为无序表*/
int SequenceSearch(int *SqList, int key, int len)
{
int i=len;
SqList[0]=key;
for( i=len; SqList[i]!=key; i--);
return i;
}
折半查找:存储结构为顺序结构;优点是查找效率高;缺点是要求线性表是按关键字有序排列,只适用于顺序存储结构;适用范围是适用于插入和删除较小的线性表;
/*有序表上的查找,折半查找,递归查找,SqList为有序表*/
int BinarySearch(int *SqList, int key, int low, int high)
{
if( low>high )
return 0;
int mid=(low+high)/2;
if( key==SqList[mid] )
return mid;
else
if( key>SqList[mid] )
BinarySearch(SqList,key,mid+1,high);
else
BinarySearch(SqList,key,low,mid-1);
}
/*有序表上的查找,折半查找,非递归查找,SqList为有序表*/
int BinarySearch_nonRe(int *SqList, int key, int len)
{
int low=1;
int high=len;
int mid=(low+high)/2;
while(low<high)
{
mid=(low+high)/2;
if(key==SqList[mid])
return mid;
else
if(key>SqList[mid])
low=mid+1;
else
high=mid-1;
}
return 0;
}
索引表线性查找:存储结构为顺序结构和链式结构;优点是在表中插入或删除记录是,只要找到该元素所属的块,就在块内进行插入和删除运算,并且块中的元素师无序的,因此不需要移动大量的元素;缺点是要增加一个辅助数组的存储空间和将初始表分块排序的运算;适用于有分块特点的记录;
摘自《数据结构与算法》 清华大学出版社 郭龙源 胡虚怀 何光明 编著 戴仕明 主审