Java二分法查找(详解)

一.什么是二分法查找

       二分法查找的前提条件是先排序在查找Arrays.sort(); 因为不排序的话无法判断查找的元素在中间元素的左边还是右边,所以要先排序。

        二分法就是把排序好的数组从中间截取分成两份,用数组中间的元素与要查找的元素进行比较,中间元素大于查找的元素就说明要查找的元素在前半部分否则就在后半部分。然后舍弃后半部分再用前半部分重复上面的步骤。原理就是如此直到要查找的元素等于中间元素。 

注意:前半部分或者后半部分并不代表一个新的数组,对应元素的下标始终不变化。

        以数组 int[ ] a={11,22,33,44,55,66,77,88,99}; 为例,要查找元素33,分两份中间元素为55(第一个下标和最后一个下标的和除二就是中间元素下标,int型),55>33,所以在前半部分 {11,22,33,44}再把前半部分分两份中间元素为22,22小于33所以在后半部分{33,44},中间元素为33,33等于33,查找完成。

二.代码

public static void main(String[] args) {
        int[] nums={12,56,89,45,20,36,99};//原数组
        int num=100;//要查找的元素
        Arrays.sort(nums);//升序排序
        System.out.println("排序后的数组为:" + Arrays.toString(nums));//排序后的数组
        int first = 0;//数组首部下标
        int end = nums.length - 1;//数组尾部下标
        int a = 0;//最后输出的a就为查找的元素的下标
        while (first <= end) {//判断条件  不满足就说明要查找的元素不存在
            int mid = (first + end) / 2;//中间元素下标  因为首尾下标变化会影响中间元素下标故写在循环内
            a = mid;
            if (nums[mid] > num) {//查找元素小于中间元素
                end = mid - 1;//尾部下标变化 首部不变
            } else if (nums[mid] < num) {//查找元素大于中间元素
                first = mid + 1;//首部下标变化 尾部不变
            } else {//都不满足说明等于 输出a 结束循环
                System.out.println(a);
                break;
            }
        }
        if (first > end) {//当数组内没有你要查找的元素 就会不满足循环条件
            System.out.println("没有这个数字");//输出没有这个数
        }
    }

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值