Java算法,二分查找(BinarySearch)

1.二分查找的实现原理

  • 要求在一个有序数列中,查找指定的元素

  • 注意:如果数列中的元素是对象类型,要求对象可以大小比较。

  • 二分查找机制:

    • 每次都找到当前数列的中间位置的元素,与待查找的元素比较

    • 相等,找到了元素

    • 不相等,如果待查找的元素比中间位置的元素小,就去左侧继续查找。 如果待查找的元素比中间位置的元素大,就去右侧继续查找

    • 结束条件

      1. 找到元素,就停止查找

      2. 元素查找不存在时,就会对数列进行压缩

        当数列的两个边界交叉时,表示已经没有元素了

0 1 2 3 4 5 6 7 8 9 数组下标
1 3 5 7 9 15 20 25 30 100 元素

找 15(这个元素)
第1次,找到中间位置 left=0 , right=9 , mid=(0+9)/2=4–> 9 < 15, 继续向右找
第2次,找到中间位置 left=5 , right=9 , mid=7–> 25>15 , 继续向左找
第3次,找到中间位置 left=5 , right=7 , mid=6—> 15=15 找到

找24
第1次,left=0,right=9,mid=4–>9<24 -->
第2次,left=5,right=9,mid=7—>25>24 <–
第3次 ,left=5,right6,mid=5—>15<24 -->
第4次,left=6,right6,mid=6—>20<24 -->
第5次,left=7,right=6,结束

return -left - 1 ;

2.二分查找的代码实现

public class BinarySearch {
    public static void main(String[] args) {
        int nums[] = {1,3,5,7,8,10,12,20,30,50,100};//定义一个数组
        int i = BinarySearch(nums,12);//调用二分查找,查找12
        System.out.println(i);//程序运行,输出结果为  6
    }

public static int BinarySearch(int[] nums,int num){
		//定义二分查找的方法,传入一个数组,传入一个整数表示想要查找的数字
        int left = 0;//定义左边界
        int right = nums.length-1;//定义右边界
        while(true){
            if(left>right){
                return -left-1;
            }
            int mid = (right+left)/2;
            int minNum =nums[mid];
            if(minNum == num){
                return mid;
            }
            if(num<minNum){
                //继续向左找
                right = mid-1;
            }else{
                //继续向右找
                left =mid+1;
            }
        }
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值