二分查找值递归与循环

二分查找值递归与循环

1,递归

效果实现:
在这里插入图片描述

代码实现:

 int []arr={
    
    1,2,3,4,5,6,7,9,10,15,56,78,90,100};
        search(arr,90,0,arr.length-1);


 //递归    二分查找------前提:数组升序
    private static void search(int [] arr,int x,int start,int end) {
    
    
        //1,定义查找范围,求出中间数的下标
        int mid=(start+end)/2;
        //2,和中间数进行比较
        if (x==arr[mid]){
    
    
            System.out.println("找到了,在数组中,下标为:"+mid);
            return;
        }else if (x>arr[mid]){
    
      //  区间在右边
            start=mid+1;
        }else {
    
         //区间在左边
            end=mid-1;
        }
        //正常的范围
        if (start<=end){
    
    
            //递归
            search(arr,x,start,end);
        }else {
    
    
           System.out.println(x+"不在数组中");
        }

    }

2,循环实现

这里我用的是while循环
效果实现:
在这里插入图片描述
在这里插入图片描述
代码实现:

 int []arr={
    
    1,2,3,4,5,6,7,9,10,15,56,78,90,100};
        search1(arr,0);


 //循环    二分查找------前提:数组升序
    private static void search1(int [] arr,int x) {
    
    
        int start=0;
        int end=arr.length-1;
        int mid=(start+end)/2;
        while (start<=end){
    
    
            //2,和中间数比较
            if (x==arr[mid]){
    
    
                System.out.println("找到了,在数组中,下标为:"+mid);
                return;
            }else if (x>arr[mid]){
    
    
                start=mid+1;
            }else {
    
    
                end=mid-1;
            }
            mid=(start+end)/2;
        }
        System.out.println(x+"不在数组中");
    }

猜你喜欢

转载自blog.csdn.net/weixin_44889894/article/details/110822749