二分法查找

…衆ロ難τιáo~ 提交于 2020-02-29 16:40:10

二分法查找适用查找一组有序数列,例如10,15,25,36,49,55,62,78,99,200这种单调递增的数列

二分查找的基本思想如下:

       1、left对应数列第一个数的位置(即0),right对应数列最后一个数的位置(即n-1),mid设置为(left+right)/2。

       2、比较需要查找的数值key和mid这个位置所对应的数值大小,

                             若key小于arry[mid],则right=mid-1,查找区间变为[left,mid-1]

                             若key大于arry[mid],则left=mid+1,查找区间变为[mid+1,right]

                             若key等于arry[mid],则查找成功

       3、重复上述循环,直至查找成功或left>right

下面给出一张查找的例图,以数组10,15,25,36,49,55,62,78,99,200为例,查找78

     查找14

下面贴出代码

public static void main(String args[]){
        int[] arr ={10,20,30,40,50,60,70,80,90,100};
        int num_input;
        int mid = 0;
        int left=0;
        int right;
        System.out.println("请输入要查找的数");
        Scanner sc =new Scanner(System.in) ;
        num_input=sc.nextInt();
        
        right=arr.length-1;
        while(left<=right) {
            mid=(left+right)/2;
            if (num_input == arr[mid]) {
                break;
            }
            else if (num_input > arr[mid]){
                left=mid+1;
            }else{
                right=mid-1;
            }
        }
        if(left>right){
            System.out.println("未找到");
        }else {
            System.out.println("找到数字"+arr[mid]);
        }
    }

做几次实验

 

 

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