二分查找

瘦欲@ 提交于 2019-12-01 04:54:34

1、题干:在数组中用二分查找元素

2、答题思路:通过对数组不断折半查找,与中间值比较大小后,选择相应的数组区间

3、关键代码:

 //本函数使用递归方法,调用find(数组,查询的值,起始下标,末尾下标)如find1(array,x,0,array.length-1),找到返回下标,否则返回-1,查找前必须先升序排序public static int find1(int a[],int x,int min,int max){
        int k=(min+max)/2;
        if(a[k]<x&&k<max)
            return find1(a,x,k+1,max);
        else if(a[k]>x&&k>min)
            return find1(a,x,min,k-1);
        else if(a[k]==x)
            return k;
        return -1;
    }
//普通方法的二分,while条件改写min<max则可以简化判断条件public static int find2(int a[],int x,int min,int max){
    while(true){
        int k=(min+max)/2;
        if(a[k]<x&&k<max){
            min=k+1;
        }

        else if(a[k]>x&&k>min){
            max=k-1;
        }

        else if(a[k]==x)
            return k;
        else
             return -1;
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!