二分查找法

借鉴于《数据结构-严蔚敏》,《labuladong 算法小抄》

后者给出的代码更为完善。

一共三种二分查找法,后两者针对有重复值的情况。

1 简单二分查找

2 左边界二分查找

3 有边界二分查找

 

1.简单二分查找法测试代码

import java.util.Arrays;
import java.util.Random;

public class DemoBinarySearch {
    public static void main(String[] args){
        Random rd = new Random();
        int[] array = {12,3,44,23,-3,-67,200,18,15};
        Arrays.sort(array);
        System.out.println(array.length);//元素总数
        System.out.println(Arrays.toString(array));//有序列表
        System.out.println(BinarySearch(array,15));//查到到地元素下标
    }

    /**
     *二分查找法
     * @param a 待查找地有序列表
     * @param key   要查找的值
     * @return  找到则返回 key 的下标,找不到则返回-1
     */
    public static int BinarySearch(int[] a,int key){
        if(null==a||key<a[0]||key>a[a.length-1]) return -1;

        int low=0;
        int high=a.length-1;

        while(low<=high){
            int mid=low+(high-low)/2;       //防止两个超大值相加溢出
            if(key==a[mid]) return mid;
            else if(key<a[mid]) high=mid-1;
            else if(key>a[mid]) low=mid+1;
        }

        return -1;
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值