java二分法查找的递归算法如何实现。

解决方案 »

  1.   

    package com.houlei.binarySearch;public class BinarySearch { public static void main(String[] args) {
    int [] array = {1,7,9,25,64,98};
    int index = binarySearch(9,array,0,array.length);
    System.out.println("Index : "+index);
    }

    public static int binarySearch(int elem,int array [],int low,int high){
    if(low>high)return -1;
    int mid = (low+high)/2;
    if(array[mid] == elem)return mid;
    if(array[mid] < elem) return binarySearch(elem,array,mid+1,high);
    if(array[mid] > elem) return binarySearch(elem, array, low, mid-1);
    return -1;
    }
    }
      

  2.   

    这个在百度或google上一搜就有了啊
      

  3.   

    package onlyfortest;import java.util.Arrays;public class BinarySearch {
      public BinarySearch() {
      }
      public static void main(String[] args){
        int[] iArrays = new int[]{4,7,2,67,23,12,9,0,78,445,67};
        Arrays.sort(iArrays);
        print(iArrays);
        System.out.println("the value is:"+binarySearch(78,iArrays,0,iArrays.length-1));
      }
      public static int binarySearch(int elem,int[] arrays,int low,int high){
        int ret = -1;
        if(low>high) return -1;
        int mid = (low+high)/2;
        System.out.println(mid+" "+arrays[mid]);
        if(arrays[mid]==elem){System.out.println("--"+mid); return mid;}
        if(arrays[mid]<elem) ret = binarySearch(elem,arrays,mid+1,high);
        if(arrays[mid]>elem) ret = binarySearch(elem,arrays,low,mid-1);
        System.out.println(mid);
        return ret;
      }
      static void print(int[] arrays){
        for(int i=0;i<arrays.length;i++){
          System.out.print(" "+arrays[i]);
        }
        System.out.println();
      }
    }
      

  4.   

    参考JDK java.util.Arrays的二分法代码不就OK了
      

  5.   

    package com.sghlwxf.binarySoft;public class TestBinarySoft{
       public static void main(String args[]){
       int[] array= new int[]{9,5,12,43,13,76,4,10,23};
       //定义要查找的数
        int seek = 76;
       //定义下标
        int index = 0;
       //定义起始位置
        int start = 0;
       //定义结束位置
        int end = 0;
        //定义计数器
       while(true){
          count ++;
         // int index = (start + end)/2;
         //为了防止start+end溢出,所以写成start+((end - start)/2)
          int index =  start + ((end - start)/2);
         if(array[index]<seek){
            start = index;
            }else if(array[index]>seek){
                end = index;
            }else{
             break;
            }
        }
         System.out.pritln("所运行的次数是"+count+"地址为"+index);
      }
    }