折半查找法的递归和非递归形式

本文介绍了折半查找法在数据结构中的应用,提供了非递归和递归两种形式的C语言及C++实现。通过分析判定树,展示了折半查找在查找成功时最多进行的比较次数。非递归实现中,利用区间初值逐步缩小查找范围;递归实现中,根据中间元素与目标值的比较结果,在相应区间继续查找,直到找到目标或搜索范围为空。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
1、折半查找的查找过程是:先确定待查记录所在区间,然后逐步缩小范围至到找到或者找不到该记录为止。

2、折半查找的性能分析可以由判定树得出,折半查找在查找成功时给定值进行比较的关键字个数至多为⌊log_2 ⌋

*/

//折半查找法的非递归形式

int Search_Bin ( SSTable ST, KeyType kval ) {
   low = 1;  high = ST.length;     // 置区间初值
   while (low <= high) {
      mid = (low + high) / 2;
      if   ( kval == ST.elem[mid].key  )
              return  mid;       // 找到待查元素
      else  if ( kval < ST.elem[mid].key) )
              high = mid - 1;   // 继续在前半区间进行查找
      else  low  = mid + 1;  // 继续在后半区间进行查找
   }
   return 0;
}


//折半查找法的递归形式
int b_search(int elem[], int low, int high, int kval)
//在数组elem的下标范围为low~high(low>0)中查找kval,若查不到则返回0.
{  
    int mid;  
    if(low>high)  
        return -1;  
    else{  
        mid = (l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值