二分查找算法

1.二分查找算法

给定的条件:给定的有序数组A查找目标值为target,其中A标记为

 数组序号从0开始,其下标最大为数组长度-1.

举例数组:5   14   22  30  31   41  44

条件:i>j   i表示左边下标     j表示右边下标     i从5开始      j  从44开始

思想:每次计算其中间下标的值和target值进行对比,分为以下三种情况

middle=(i+j)>>>2      表示右边移一位

target<a[middle]     j=m-1

a[middle]<target     i=m+1

target=a[middle]     结束查找找到了

 

复制代码
public class Main {
    public static void main(String[] args) {
        int[] a = {5,14,22,30,31,41,44};
        System.out.println(binarySearchBasic(a,5));
        System.out.println(binarySearchBasic(a,44));
    
        int i=0;
        int j= Integer.MAX_VALUE-1;//求出最大下标
        System.out.println("索引值:i="+i);
        System.out.println("索引值:j="+j);
        int m = (i+j)/2;
        System.out.println("索引值:(m+j)/2="+(m+j)/2);
    }
    //实现二分查找
    public static int binarySearchBasic(int[] a,int target){
        //二分查找基础版本  a待查找的有序数组  target目标值
        //找得到返回索引   找不到返回-1
        int left = 0;
        int right = a.length-1;
        while(left<=right){
         int middle = (left+right)/2;
            if(a[middle]<target){
                left = middle+1;
            }else if(target<a[middle]){
                right = middle-1;
            }else{
                return middle;
            }
        }
        return -1;//没有找到返回为-1
    }
}
复制代码

 

posted @   无名之辈的ggb  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示