美文网首页
算法之折半查找(二分法)

算法之折半查找(二分法)

作者: 冻冬龙东墙 | 来源:发表于2020-04-01 23:31 被阅读0次

算法背景:

binarySearch折半查找算法,也称作二分法,是一种运用于顺序存储结构中的搜索算法,比如有序数组。

算法思想:

1.首先从有序数组中间值开始搜索,如果该位置的值刚好等于要查找的值,则返回结果,搜索结束

2.当要查找得值大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤1的操作。

时间复杂度:o(n)

非递归算法:

/**
*非递归方法
*参数 arr为int型有序数组{5,9,15,33,50,66,79}
*    key为要查找的值
*返回值 返回值为目标值索引
*/
    public static int testBindarySearch(int[] arr, int key){
        int low =0;                 //数组最小值的索引
        int hight = arr.length-1;    //数组最大值的索引

        while(low<=hight){
            int mid = (int) Math.floor((low+hight)/2);
            if (key==arr[mid]){
                return mid;
            }else if(key>arr[mid]){
                low = mid+1;            //把最小索引变化到中间值+1的位置,即数组的索引范围为(mid+1,hight)
            }else{
                hight=mid-1;             //把最大索引变化到中间值-1的位置,即数组的索引范围为(low,mid+1)
            }
        }

        return -1;    //key值大于hight或小于low时
    }

递归算法:(不推荐使用,因为递归算法是一种直接或者间接地调用自身的算法,虽然代码整洁,但运行效率低,且由于需要为局部量或返回点开辟栈来存储,容易造成栈溢出,报java.lang.StackOverflowError错误)

/**
*递归方法
*参数 arr为int型有序数组{5,9,15,33,50,66,79}
*    key为要查找的值
*返回值 返回值为目标值索引
*/
    public static int testBindarySearch2(int[] arr,int key){
        int low =0;                 //数组最小值的索引
        int high= arr.length-1;    //数组最大值的索引

        if(low>high){return -1;}
        int mid= (int) Math.floor((low+high)/2);
        if(key==arr[mid]){
            return mid;
        }else if(key<arr[mid]){
            high=mid-1;
            return testBindarySearch2(arr,key);
        }else{
            low=mid+1;
            return testBindarySearch2(arr,key);
        }
    }

相关文章

  • 查找算法

    三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表

  • 算法:二分法查找(折半查找法)

    算法:二分法查找(折半查找法) 这是最经典的折半查找,而在面试的时候往往会对某些经典的数据结构和算法进行魔改,这道...

  • 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找...

  • 【爬虫】数据结构实现折半查找的算法

    数据结构实现折半查找的算法 折半查找技术,也就是二分查找,通常称为二分法查找。它的前期是线性表中的记录必须是关键码...

  • 前端面试之算法二分法

    使用二分法的前提是,目标数组的元素必须是有序排列的,所以二分法属于有序查找算法 二分法又称为“折半查找”,从数组的...

  • 解析前端面试之二分查找算法

    二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。 二分法查找的思路如下: (1)首先,从数组的...

  • 算法之折半查找(二分法)

    算法背景: binarySearch折半查找算法,也称作二分法,是一种运用于顺序存储结构中的搜索算法,比如有序数组...

  • 经典算法剖析

    二分查找 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:(1)首先...

  • js实现二分法查找方法

    所谓二分法查找法,也就是折半查找,它是一种在有序数组查找特定元素的搜索算法。 参考《前端程序员面试秘籍》 思想:从...

  • 10个常用算法

    0x01 二分法 原理:二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。 一般步驟:(1)确定...

网友评论

      本文标题:算法之折半查找(二分法)

      本文链接:https://www.haomeiwen.com/subject/mczzuhtx.html