您的位置:首页 > 理论基础 > 数据结构算法

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

2015-06-01 11:30 267 查看
/*

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 = (low+high) / 2;  

        if(elem[mid]==kval)  

            return mid;  

        if(kval>elem[mid])  

            return b_search(elem,mid+1,high,kval);        /*在序列的后半部分查找*/  

        else  

            return b_search(elem,low,mid-1,kval);            /*在序列的前半部分查找*/  

    }  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息