美文网首页
二分查找

二分查找

作者: 陈_振 | 来源:发表于2018-06-03 14:49 被阅读0次
二分查找 O(logn)

递归方法
int binarySearch1(int a[] , int low , int high , int findNum)
{    
      if (low > high)        
          return -1;   

      int mid = ( high - low ) / 2 + low;       

      if (a[mid] > findNum)          
            return binarySearch1(a, low, mid - 1, findNum);        
      else if (a[mid] < findNum)            
            return binarySearch1(a, mid + 1, high, findNum);                    
      else            
            return mid;   
    
}

非递归方法
int binarySearch2(int a[] , int low , int high , int findNum)
{    
       int mid; 
       while (low <= high)
      {
            mid =  ( high - low ) / 2 + low;   //此处一定要放在while里面
            if (a[mid] < findNum)           
                low = mid + 1;        
            else if (a[mid] > findNum)            
                high = mid - 1;       
             else           
                return mid;    
    }       
    return  -1;
}

代码中有两点值得注意:

  1. 中间值的写法mid = ( high - low ) / 2 + low而不要写成(high+low)/ 2
    因为当搜索到最右边部分时,high+low有可能会是一个非常大的一个值,造成溢出,程序崩溃。

  2. 非递归方法mid的定义放在while外面,如果放在while里,会重复分配内存。

相关文章

网友评论

      本文标题:二分查找

      本文链接:https://www.haomeiwen.com/subject/gbmmhftx.html