算法——二分查找

本文介绍了二分查找的概念和工作原理,它是一种在有序数组中快速查找目标值的高效算法。查找过程从数组中间开始,通过比较目标值与中间元素来不断缩小查找范围。如果找到目标值,返回其位置;反之,根据比较结果调整查找区间,直至区间为空,表示查找失败。文章还提供了一个简洁的Java代码实现示例。
摘要由CSDN通过智能技术生成

二分查找的概念

二分查找也称为折半查找。

  • 查找要求
    要求为线性表且采用顺序存储结构,而且表中的元素按关键字有序排序。
  • 查找过程
    从表的中间记录开始,如果给定的值和中间的记录的关键字相等,则查找成功;如果给定的值大于或小于中间记录的关键字,则在表中大于或小于中间记录的那一半查找,这样重复的操作,直到查找成功,或者在某一步中查找区间为空,则代表查找失败。
    为了标记查找过程中每一位的查找区间,下面分别用low和high来表示当前查找的下届和上界,mid为区间的中间位置。
  • 查找步骤
  1. 置查找区间初值,low=1,high=表长
  2. 当low小于等于high时,循环以下操作
  • mid取值为low和high的中间值;
  • 将给定值于中间位置记录的关键字进行比较,若相等则查找成功,返回中间位置mid;
  • 若不相等则利用中间位置记录将表对分成前后两个子表。如果给定值比中间位置记录的关键字小,则high取为mid-1;否则low取为mid+1;
  1. 循环结束,说明查找区间为空,则查找失败。返回-1;
  • Java代码
class Solution {
    public int search(int[] nums, int target) {
        // 避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算
        if (target < nums[0] || target > nums[nums.length - 1]) {
            return -1;
        }
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target)
                return mid;
            else if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid - 1;
        }
        return -1;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值