有序表的查找(折半查找)

有序表:对于以数组方式存储的数据,如果已经按其关键字值的大小顺序排列好,则称为有序数组或有序表。
   对有序表可以采用 折半查找(binary search),又称 二分查找
  设有序数组r中每个记录的关键字值按升序排列为:
        r0.key, r1.key, r2.key, …, rm.key, …, rn-1.key
  其中,n为记录个数。当i<j时,有ri.key≤rj.key。
   折半查找法的基本思路(low、high和m分别指向待查元素所在区间的上界、下界和中点,k为要查找数据的关键字值):
     (1)令low=0,high=n-1。
    (2)如果low>high,则查找失败,并结束查找;否则,计算m=(low+high)/2。
    (3)让k与m指向记录的关键字进行比较。
      若k=r[m].key,则查找成功,结束查找。
      若k<r[m].key,则使high=m-1,回到(2)继续查找。
      若k>r[m].key,则使low=m+1,回到(2)继续查找。

折半查找的实现

  流程图

  

   

 

/*********************************************************/
  /*函 数 名:search_ binary                */
  /*函数功能:有序顺序表的二分查找             */
  /*入口参数:list —— 顺序表               */
  /*k—— 待查找的关键字                  */
  /*返 回 值:成功,返回在有序表中的位置,失败,返回-1   */
  /*********************************************************/
  intsearch_binary (Seq list,int k)
  {
    int m, low, high, find; 
    low=0; high=list.len-1; find=0; 
    do
    {
      m=(low+high)/2; 
      if (k==list.r[m].key) 
        find=1;
      else if(k<list.r[m].key)
        high=m-1; 
      else if (k>list.r[m].key)
        low=m+1; 
    }while ((find==0)&&(low<=high)); 
    return( (find==0) ? –1 : m );
  }


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值