被二分查找绊倒,亏不亏?!!!

有时候,我们总是会忽略一些很简单的题,直到在笔试中被检验!!!惊喜于题目的简单,惊讶于测试用例一直通不过的悲哀,然而笔试也不会再重来一次,你也不知道到底是错在哪里了。。。。格式吗?who konws。。

唯一的方法就是再敲一遍

如下:非递归二分查找,递归二分查找

//我这里写的是无返回值的,也可以写成有返回值的,都可以
public class Test3 {
    public static void main(String[] args) {
        int[] arr=new int[]{1,2,3,5,8,19,24,46};
        int key=19;
//        binarySerach1(arr,key);
        binarySearch(arr,0,arr.length-1,key);
    }

    /**
     * 非递归实现二分查找
     * @param arr
     * @param key
     */
    public static void binarySerach1(int[] arr,int key){
        int start=0;
        int end=arr.length-1;
        while (start<end){
            int mid=(start+end)/2;
            if (arr[mid]>key){
                end=mid-1;
            }else {
                if (arr[mid]<key){
                    start=mid+1;
                }else {
                    System.out.println(mid+1);
                    break;
                }
            }
        }
    }

    /**
     * 递归实现二分查找
     * @param arr
     * @param start
     * @param end
     * @param key
     */
    public static void binarySearch(int[] arr,int start,int end,int key){
        int mid=(start+end)/2;
        if (start>end || key<arr[start] || key>arr[end]){
            System.out.println(-1);
            
        }
        if (arr[mid]>key){
            binarySearch(arr,start,mid-1,key);
        }else {
            if (arr[mid]<key){
                binarySearch(arr,mid+1,end,key);
            }else {
                System.out.println(mid+1);
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值