java中二分法查找

1 时间复杂度

二分法查找的时间复杂度 T(n)=T(n/2)+O(1)所以T(n)=O(logn) 所有最坏的情况是logn,最好的情况是O(1).

2 代码实现

//二分法查找

private int binarySearchRank(int num, int[] array) { 
       int result = -1;   
       int start = 0;      
       int end = array.length-1;   
       while (start<end){ 
           if(array[start] == num){  
              result =  start; 
               break;    
        }         
     if(array[end] == num){     
           result =  end;   
             break;    
        }        
    int middle = (start+end)/2;   
         if(array[middle]>num){     
            end = middle;     
       }else  if(array[middle]<num){   
             start = middle;       
     }else {           
            result = middle;  
              break;        
    }         
   if(start+1==end){     
           result =  -1;        
        break;      
      }      
  }      
  return result;  
  }

3 代码分析

可能存在这样一种情况,当所要查找的数值的大小在数组的最大值与最小值之间,但是又不存在。这时候会进入死循环。比如 数组为 [1,3,7,9,10],num为4,这时候循环到sart=3,end=7,array[temp]=5,这时候num>array[temp]会一直执行下去。使用这种情况直接返回-1.也就是start=end-1的时候还没有找到目标值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容