二分查找

二分查找

  • 什么是二分查找
  • 实现原理
什么是二分查找

二分查找是从一个有序数组中找到目标元素(通常是找下标)的过程

实现原理

先来看两张图
图例1


image

图例2


image

nums:有序数组
fromIndex:起始指针,跟toIndex一起确定查找范围
toIndex:结束指针,结合fromIndex确定查找范围
mid:中间指针,指向查找范围中间位置的指针
midValue:中间指针指向元素的值

  • 查找过程:

首先指定查找范围是整个数组,然后找到中间指针指向的元素(midVal)的值跟目标值(如target)进行比对,如果midVal小于target,fromIndex指针从mid位置向右移动一位(图例2),反之toIndex从mid位置向左移动一位,重新确定查找范围,继续重复上述操作直到找到target等于midVal或者fromIndex>toIndex查找结束

代码实现:
public static int binarySearch(int[] nums, int target) {
        int fromIndex = 0;
        int toIndex = nums.length - 1;
        while (fromIndex <= toIndex) {
            int mid = (fromIndex + toIndex) >> 1;
            int midVal = nums[mid];
            if (midVal < target) {
                fromIndex = mid + 1;
            } else if (midVal > target) {
                toIndex = mid - 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 二分查找jdk源码 时间O(logn)空间O(1) 递归式写法: 时间和空间都是O(logn) 2. 二分插入...
    少冰三hun甜阅读 2,934评论 0 1
  • 二分查找是面试常考的知识点,其方法是在有序序列中寻找满足特定条件的值,存在许多不同的变种,最近在刷Leetcode...
    喵帕斯0_0阅读 3,265评论 0 1
  • 店小二:掌柜的,您进货回来了呀,哟!今天您买这鱼挺大呀!袁厨:那是,这是我今天从咱们江边买的,之前一直去菜市场买,...
    KB_MORE阅读 3,619评论 0 1
  • int array[] = {1, 3, 6, 7, 9, 11, 18, 21, 25, 26, 33, 35,...
    风就那么大阅读 1,664评论 0 0
  • 前言 二分查找作为程序员的一项基本技能,是面试官最常使用来考察程序员基本素质的算法之一,也是解决很多查找类题目的常...
    Jesse1995阅读 6,738评论 0 0