介绍java中的二分查找

二分查找(Binary Search),也称折半查找,是一种高效的查找算法,其时间复杂度为O(log n)。它是通过将一个有序序列递归地分成两半来进行查找,每次比较中间元素与查找元素的大小关系,从而确定要查找的元素在前半段还是后半段,并依此缩小查找范围,直到找到或者确定不存在为止。

以下是Java中二分查找的实现:

/**
 * 二分查找
 *
 * @param arr    有序数组
 * @param target 目标值
 * @return 目标值在数组中的索引,不存在则返回-1
 */
public static int binarySearch(int[] arr, int target) {
    int left = 0;
    int right = arr.length - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}

代码中,参数arr表示要查找的有序数组,参数target表示目标值。首先,定义查找范围的左右边界,即left和right变量。然后,使用while循环进行二分查找,直到找到目标值或者左右边界重合(即左边界>右边界)为止。在每一轮循环中,计算中间元素的索引mid,然后比较中间元素mid与目标值target的大小关系,如果mid等于target,则直接返回mid;如果mid小于target,则在右半部分查找,即将左边界left更新为mid+1;如果mid大于target,则在左半部分查找,即将右边界right更新为mid-1。如果循环结束时仍然没有找到目标值,则返回-1表示不存在。

需要注意的是,二分查找的前提是数组必须是有序的,否则无法使用二分查找算法进行查找。另外,对于重复元素的处理,有两种方式:一种是查找第一个等于目标值的元素,一种是查找最后一个等于目标值的元素,还有一种是查找第一个大于等于目标值的元素。针对不同的场景,可以根据需要选择不同的实现方式。

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值