递归实现二分查找

递归查找元素在有序数组中的位置:

/*
递归实现二分查找
*/
private static int indexOf(int[] list, int left, int right, int target) {
    while (left <= right) {
        int index = (left + right) / 2;
        if(list[index] == target){
            return index;
        }else if (list[index] > target) {
            return indexOf(list, left, index - 1, target);
        } else if (list[index] < target) {
            return indexOf(list, index + 1, right, target);
        }
    }

    return -1;
}

新增需求:若一个元素不在数组中,获取前一个元素与后一个元素的位置:

/*
若查找的元素在数组中,则返回该元素的位置,用数组的形式来表示 {index}
若查找的元素不在数组中,返回{right, left},分别为左边的元素的位置与右边元素的位置。
若查找的元素超出了数组的范围,返回{-1}
*/
private static int[] indexOf(int[] list, int left, int right, int target) {
    while (left <= right) {
        int index = (left + right) / 2;
        if(list[index] == target){
            return new int[]{index};
        }else if (list[index] > target) {
            return indexOf(list, left, index - 1, target);
        } else if (list[index] < target) {
            return indexOf(list, index + 1, right, target);
        }
    }

    if(right<0 || left>list.length-1){
        return new int[] {-1};
    }else {
        return new int[]{right, left};
    }
}

测试类:

/*
测试用例:查找从-2开始到42的数字
*/
public class Test {
    public static void main(String[] args) {
        int[] a = {1, 8, 12, 15, 16, 21, 30, 35, 39, 39};
        for (int i = -2; i <= 42; i++) {
            System.out.println(i + ": " + Arrays.toString(BinarySearch.indexOf(a, 0, a.length - 1, i)));
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值