• 二分查找的三种写法


    二分查找概念

    二分查找:是一种在有序数组中查找某一特定元素的搜索算法。

    这种搜索算法每一次比较都使搜索范围缩小一半。

    写法一

    根据定义:

    public static int binary(int[] a,int data)
    {
        int mi=0,ma=a.length-1,mid;
        while(mi<=ma)
        {
            mid=(mi+ma)/2;
            if(a[mid]>data) ma=mid-1;
            else if(a[mid]<data) mi=mid+1;
            else return mid;
        }
        return -1;
    }
    

    写法二

    对于写法一而言,第8行代码会出现bug:mid=(min + max)/2;
    这句代码在 min 和 max 很大的时候,会出现溢出的情况,从而导致数组访问出错。
    进行改进:将加法变成减法。

    public static int binary(int[] a,int data)
    {
        int min=0,max=a.length-1,mid;
        while(min<=max)
        {
            mid=min+(max-min)/2; // 防止溢出
            if(a[mid]>data) max=mid-1;
            else if(a[mid]<data) min=mid+1;
            else return mid;
        }
        return -1;
    }
    

    写法三

    利用位运算(官方的二分搜索法的实现写法)

    public static int binary(int[] a,int data)
    {
        int mi=0,ma=a.length-1,mid;
        while(mi<=ma)
        {
            mid=mi+((ma-mi)>>1); // 无符号位运算符的优先级较低,先括起来
            if(a[mid]>data) ma=mid-1;
            else if(a[mid]<data) mi=mid+1;
            else return mid;
        }
        return -1;
    }
    
  • 相关阅读:
    111
    使用正则表达式,取得点击次数,函数抽离
    爬虫大作业
    Hadoop综合大作业
    hive基本操作与应用
    熟悉HBase基本操作
    爬虫大作业
    第三章 熟悉常用的HDFS操作
    数据结构化与保存
    用正则表达式,取得点击次数,函数抽离
  • 原文地址:https://www.cnblogs.com/OFSHK/p/11258780.html
Copyright © 2020-2023  润新知