二分查找非递归与递归实现

非递归

public class BinarySearch {

    public static void main(String[] args) {
        int[] array = {1,3, 8, 10, 11, 67, 100};
        int index = binarySearch(array, 1200);
        System.out.println("index=" + index);
    }

    /**
     * 如果找到返回对应下标,否则返回-1
     * 这个案例是针对升序排序的数组
     * @param array
     * @param target
     * @return
     */
    public static int binarySearch(int[] array, int target){
        int low =0;
        int hight=array.length-1;
        while(low<=hight){                 //遍历还没结束
            int mid = (low+hight)/2;       //取中间值mid点位置
            if(array[mid]==target){        //寻找到目标数
                return mid;
            }
            if(array[mid] > target){        //如果中间值大于目标数,则将highr点位置移动mid位置左边
               hight = mid-1;
            }
            if(array[mid] < target){       //如果中间值小于目标数,则将low点位置移动mid位置右边
                low = mid+1;
            }
        }
        return -1;
    }
    
}
 

递归


public class TestBinarySearch {
    
    private static int binarySearch(int[] arr, int findVal, int left, int right) {
        if (left > right) {
            return -1;
        }
        
        int mid = (left + right) / 2;
        
        if (findVal == arr[mid]) {
            return mid;
        } else if (findVal > arr[mid]) {
            return binarySearch(arr, findVal, mid, right);
        } else if (findVal < arr[mid]) {
            return binarySearch(arr, findVal, left, mid);
        }
        
        return 0;
    }
    
    public static void main(String[] args) {
        int[] arr = {1, 8, 10, 89, 1000, 1000, 1234, 5678};
        int findVal = 5678;
        
        System.out.println(binarySearch(arr, findVal, 0, arr.length));
        
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值