搜索——一些搜索方法

1、顺序搜索

    ---无序表的顺序搜索:从前往后(从后往前)逐个比较;可以在顺序表上实现,也可以在链表上实现。

for (i=0; i<n; i++)
	    if(L[i]==x)                      
            return   Success;           //搜索成功         
    return  NotPresent;              //搜索失败

    ---有序表的顺序搜索:从前往后(从后往前)逐个比较;可以在顺序表上实现,也可以在链表上实现

     for (i=0; (i<n)&&(L[i]<x);  i++);   
     if ((i<n)&&(L[i]==x))                      
          return  Success;                      //搜索成功
     return NotPresent;                      //搜索失败

        (每次循环都要检测搜索范围是否越界。通过设置哨兵元素可以提高算法效率。)

           带哨兵元素的有序表顺序搜索:

    L[n]=x;    //设置哨兵元素
    for (i=0; L[i]<x;  i++);        //不需要检测是否越界 
    if ((i<n)&&(L[i]==x))                     
          return  Success;            //搜索成功
    return  NotPresent;           //搜索失败

2、二分搜索法

     只能在顺序存储的有序表上实现。

     设有序表长度为n:

        (a0,a1,.....,an-1)

     将中间位置上的元素am的关键字与待搜索元素x的关键字进行比较:

    -若相等,则搜索成功;

    -若x较小,则在子表(a0,...,am-1)中继续进行二分搜索

    -若x较大,则在子表(am+1,.....,an-1)中继续进行二分搜索

into m,low=0,high=n-1;
while  (low<=high){
        m=(low+high)/2;
        if (x<L[m]) high=m-1;
	    else if (x>L[m]) low=m+1;
		     else   return  Success;    //搜索成功 
}
return  NotPresent;                     //搜索失败 

性能分析:

    时间复杂度O(log2N),在所有基于关键字比较的搜索方法中,二分搜索速度最快。二分搜索只能在顺序存储的有序表上实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值