数据结构-七大查找算法

此篇博客关于七大查找算法总结得非常好,参考地址如下:

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、哈希查找

         未完,待续

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值