查找算法之二分查找

二分查找(Binary Search),又称折半查找,是一种在有序数组或列表中查找特定元素的搜索算法。其基本思想是利用数列有序这一特性,通过不断将待搜索区域缩小一半的方式来快速逼近目标值。

以下是二分查找的主要步骤:

1. **初始化**: 首先,确保数据结构是一个有序数组(通常是升序或降序)。
2. **确定范围**: 设定初始搜索区间为整个数组,即从数组的第一个元素到最后一个元素。
3. **计算中间索引**: 计算区间的中间元素索引(通常是`low + (high - low) / 2`,其中`low`和`high`分别是当前搜索区间的起始和结束索引)。
4. **比较中间元素**: 将中间元素与要查找的目标值进行比较:
   - 如果目标值等于中间元素,则查找成功,返回中间元素的索引。
   - 如果目标值小于中间元素,则在数组的左半部分(即从`low`到新的中间索引减一的部分)继续执行二分查找。
   - 如果目标值大于中间元素,则在数组的右半部分(即从新的中间索引加一到`high`的部分)继续执行二分查找。
5. **更新区间**: 根据比较结果,将搜索区间缩小到目标值所在的那一半。
6. **重复步骤3至5**: 直到找到目标值,或者搜索区间为空(表示目标值不存在于数组中)。

由于每次迭代都将搜索空间大约减半,因此二分查找的时间复杂度是O(log n),这里的n是数组中的元素个数。这种高效的查找方式特别适用于大型且已排序的数据集。

老规矩,还是以一组图解析整个过程:

二分查找图画讲解

Java数组本身是支持二分查找的,以下是一个简单示例,有兴趣可以去看二分查找的源码:

import java.util.Arrays;

public class BinarySearch {
    public static void main(String[] args) {
        int[] arr = {1, 9, 7, 5, 3, 2, 4, 6, 8};
        Arrays.sort(arr);
        int i = Arrays.binarySearch(arr, 5);
        System.out.println(i);
    }
}

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值