查找算法——折半查找

折半查找的条件:为已经有序的数组。

折半查找的思想:

min,max为数组的最小和最大下标

1.先取最中间的那个数(在这里声明为middle,是下标,不是值),与要查找的数进(这里声明为goal,是值)行比较,如果不相等,则进入判断;

2.如果arr[middle]比goal大,则范围缩小到0~middle-1;

3.如果arr[middle]比goal小,则范围缩小到middle+1~arr.length;

4.当min>max时,说明没有找到,则返回-1;

代码如下:

    //折半查找,arr是已经排序好的数组,goal是要查找的数,返回下标
    public static int search(int[] arr,int goal)
    {        
        int min = 0;
        int max = arr.length;
        int middle = arr.length/2;
        
        int i=0;//记录查找次数
        while(arr[middle]!=goal)
        {
            System.out.println("times:"+(++i));
            if(arr[middle]>goal)
            {
                max=middle-1;                
            }
            if(arr[middle]<goal)
            {
                min=middle+1;
            }
            if(min>max)
            {
                return -1;
            }
            middle=(min+max)/2;
        }
        return middle;
    }    

 

posted @ 2015-07-24 13:02  凌晨10点13分  阅读(330)  评论(0编辑  收藏  举报