面试基础 -- 二分查找

         2012年的最后一天,轻松一点,写个简单点的程序,同样也是面试与被面试经常考查的一个题,不要以为真的容易哦, 拒说有90 % 的程序员不能完全写对二分算法呢,好吧,这话可不是我说的,有兴趣的可以上网查查。主要还是细节问题,思路大家都知道,在这里就不重复了。看下面的代码吧。

          1. 这个写得对吗,真的没问题吗?  

public class BinaryQuery {     
       public static void main(String[] args) {
             int array[] = {2, 3, 5, 23, 43, 49, 52, 67, 77};
            BinaryQuery bq = new BinaryQuery();
             int a = bq.query(array, 23);
            System. out.println(a);
      }      
          
       private int query(int[] array, int key) {
             int low = 0;
             int high = array.length - 1;
             int mid = 0;
            
             while(low < high){     //要注意这里              
                   mid = (low + high)/2;
                   if(array[mid] == key){
                         return array[mid];
                  } else{
                         if(array[mid] > key){
                              high = mid - 1;                              
                        } else if (array[mid] < key){
                              low = mid + 1;                            
                        }
                  }
            }
             return -1;
            
      }
}
 2.  把上面的小bug改掉以后,这个真得好吗,大数相加会怎么样?

public class BinaryQuery {      
       public static void main(String[] args) {
             int array[] = {2, 3, 5, 23, 43, 49, 52, 67, 77};
            BinaryQuery bq = new BinaryQuery();
             int a = bq.query(array, 23);
            System. out.println(a);
      }
       private int query(int[] array, int key) {
             int low = 0;
             int high = array.length - 1;
             int mid = 0;
            
             while(low <= high){                  
                   mid = (low + high)/2;
                   if(array[mid] == key){
                         return array[mid];
                  } else{
                         if(array[mid] > key){
                              high = mid - 1;                              
                        } else if (array[mid] < key){
                              low = mid + 1;
                        }
                  }
            }
             return -1;
            
      }
}


3  这样总可以了吧  
把mid = (low + high)/2; 写成mid = low + (high - low)/2;

那最后的核心代码是

   private int query(int[] array, int key) {
             int low = 0;
             int high = array.length - 1;
             int mid = 0;
            
             while(low <= high){
                  mid = low + (high - low)/2;
                   //mid = (low + high)/2;
                   if(array[mid] == key){
                         return array[mid];
                  } else{
                         if(array[mid] > key){
                              high = mid - 1;                             
                        } else if (array[mid] < key){
                              low = mid + 1;
                        }
                  }
            }
             return -1;            
      }

      暂时就想到这些,如果还有需要注意的细节,欢迎留言告诉我,帮助我也帮助别人,当然最重要的是帮助自己。 2012年12月31日,最后一天,年终总结有木有?

你可能感兴趣的:(面试基础 -- 二分查找)