参考一下这个,这个是JAVA二分法的实现!int[] nums = {1,2,3,4,5,6,7,8,9,10};
int begin = 0;
int end = nums.length - 1;
        
int key = 10;
int index = -1;
int times = 0;
        
while(begin <= end){
    times++;
    //
    int middle = ( begin + end ) / 2;
    //
    if(nums[middle] == key){
        index = middle;
        break;
    }
    if(nums[middle] < key){
        begin = middle + 1;
    }
    if(nums[middle] > key){
        end = middle - 1;
    }
}
//count : 4 , index : 9
System.out.println("count : "+ times + " , index : " + index);

解决方案 »

  1.   

    二分的算法楼上已经帖出来了。
    可以在while中的最后做判断是否取到值,没取到的话就返回索引
    java只能返回一个值不过你可以返回个数组或者list
      

  2.   

    肯定就是相邻的两个值嘛,拿到位置,放到集合中,或者MAP中,key是位置,value是值。搞定。
      

  3.   

    public int onsort(int[]array int value){
    int j=array.length;
    while(--j>=0){
    if(array[j]<value)
    return j;
    }
    return -1;
    }
      

  4.   


    class tset{
           int  i ,j;
          void foo(){
               //.....
               this.i = xxx;
               this.j =yyy;
           }
    }从一个方法中获得(返回)多个值。
      

  5.   

    返回数组不就行了? public static int[] binarySearch(int[] array,int value){
    int i=0,j=array.length-1,mid;
    //startEnd[0]表示开始位置,startEnd[1]表示结束位置
    int[] startEnd=new int[2];
    while(i<=j){
    mid=i+j>>1;
        if(array[mid]==value){
         startEnd[0]=mid;
         startEnd[1]=mid;
         //找到,则开始位置=结束位置
         return startEnd;
        }else if(value<array[mid]){
         if(mid-1<i){
         startEnd[0]=mid-1;
         startEnd[1]=mid;
         return startEnd;
         }else{
         j=mid-1;
         }
        }else{
         if(mid+1>j){
         startEnd[0]=mid;
         startEnd[1]=mid+1;
         return startEnd;
         }else{
         i=mid+1;
         }
        }
    }
    return startEnd;
    }