首页  »   J2EE

二分,该如何解决

网友分享于:2013-06-29  浏览:0次
二分
import java.util.*; 
public class Example2_7 { 
    public static void main(String args[]) { 
      int [] a={12,9,45,23,45,6,45,90,123,19,34}; 
      Arrays.sort(a); 
      System.out.println(Arrays.toString(a)); 
      int number=45; 
      int index=Arrays.binarySearch(a,number);    
      if(index>=0){ 
         System.out.println(number+"和数组中索引为"+index+"的 
元素值相同");    
      } 
      else{ 
         System.out.println(number+"不与数组中任何元素值相 
同"); 
      } 
   } 



为什么都是8?感觉不对啊
------解决思路----------------------
eclipse下很容易知道源代码,按住ctr点击方法名即可查看源代码
它实际调用了自己的私有方法
根据代码可以很清楚的明白为什么总是8了
共进行2次二分查找

    private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            int midVal = a[mid];

            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }

------解决思路----------------------
楼上代码贴出来了
        int high = toIndex - 1;
高位是按索引-1走的

相关解决方案

最新解决方案