此篇博客关于七大查找算法总结得非常好,参考地址如下:
http://www.cnblogs.com/maybe2030/p/4715035.html#_labelTop
1、顺序查找
1.1 顺序查找
一句话总结:顺序扫描,依次将扫描值与给定K值比较,若相等则表示查找成功。
int SequenceSearch(A[],K,n)
{
int i;
for(i=0;i<n;i++)
{
if(A[i]==k)
return i;
}
return -1;
}
1.2 分块查找
一句话总结:先对索引表(各块中的关键字构成的)进行二分查找或顺序查找,在已确定的块中用顺序法进行查找。
分块查找又称索引顺序查找,它是顺序查找的一种改进方法。
算法思想:将n个数据元素"按块有序"划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须"按块有序";即第1块中任一元素的关键字都必须小于第2块中任一元素的关键字;而第2块中任一元素又都必须小于第3块中的任一元素,……
算法流程:
step1 先选取各块中的最大关键字构成一个索引表;
step2 查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。
2、插值查找
2.1 二分查找
一句话总结:有序查找,用给定值k先与中间结点的关键字比较,相等代表查找成功;不相等,在子表中继续查找。
int BinarySearch(int A[], value,n)
{
int high,middle,low;
low=0;
high=n-1;
while(low<=high)
{
middle=(high+low)/2;
if(A[middle]=value)
return middle;
if(A[middle]>value)
high=middle-1;
if(A[middle]<value)
low=middle+1;
}
return -1;
}
2.2 插值查找
一句话总结:插值查找是二分查找的升级版,将查找点计算改为自适应。
在二分法中:mid=(low+high)/2, 即mid=low+1/2*(high-low);
通过类比,我们可以将查找的点改进为如下:mid=low+(key-a[low])/(a[high]-a[low])*(high-low),
也就是将上述的比例参数1/2改进为自适应的。其他与二分法相同。
2.3 斐波那契查找
一句话总结:利用斐波那契数列和黄金分割准则,将mid前后的数据个数比完美分割为1:0.618,然后进行查找。
有序表的元素个数n=F(k)-1;mid=low+F(k)-1;mid前有F(k-1)-1个元素;mid后有F(k-2)-1个元素。
(1)当mid=value,找到;
(2)当mid>value,high=mid-1,k=k-1,在mid前F(k-1)-1个元素中查找。
(3)当mid<value,low=mid+1,k=k-2,在mid后F(k-2)-1个元素中寻找。
3、树表查找
未完,待续
4、哈希查找
未完,待续