静态查找和动态查找
静态查找:数据集合稳定,不需要添加,删除元素的查找操作。
动态查找:数据集合在查找的过程中需要同肘添加或删除元素的查找操作。
查找结构
对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法等来提高查找的效率。
对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问題。
顺序查找
顺序查找又叫线性查找,是最基本的查找技术,查找过程是:从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功。如果查找了所有的记录仍然找不到与给定值相等的关键字,则查找不成功。
折半查找
while( low <= high)
{
mid=(low+high)/2;
if( str[mid] = key )
return mid;
if( str[mid] < key )
low=mid+1; //在后半序列中查找
if( str[mid] > key )
high=mid-1; //在前半序列中查找
}
插值查找(按比例查找)
while( low <= high)
{
mid=low+(key-a[low])/(a[high]-key)*(high-low); //插值查找的唯一不同点
if( str[mid] = key )
return mid;
if( str[mid] < key )
low=mid+1; //在后半序列中查找
if( str[mid] > key )
high=mid-1; //在前半序列中查找
}
斐波那契查找
斐波那契数列(F[k]) : 1,1,2,3,5,8,13,21,34,55,89