java基础算法(二分查找)

系列文章目录

  1. 二分查找
  2. 选择排序
  3. 递归
  4. 快速排序
  5. 散列表
  6. 广度优先搜索
  7. 狄克斯特拉算法
  8. 贪婪算法
  9. 动态规划
  10. K最近邻算法
  11. 常用基础算法简介

文章目录


前言

 由于最近放假在家没啥事情干,所以呢想把自己学习到的知识分享出来,这一系列呢主要是介绍一些常用的基础算法在java中如何使用,阅读本系列你需要一些基本的java知识和基本的代数知识。


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么要使用二分查找?

12345........100

比如上面这个列表你需要以最少的次数找到需要找的数字 我会告诉你是大了,小了,对了,最简单的方式肯定是一个一个问 例如你从1开始问起  如果1不是你就可以排除1 然后再2,3,4,5 这样一直问下去。

如果目标数字是99 那么你需要99次才能找到。 这个就是最简单的查找方式 也叫傻找 。如果是100万个数据这样的查找方式效率就相对比较低了,这个时候就衍生出更优化的查找方式就是二分查找 但是这个时候大家可能又有疑问了🤔️我们怎么知道什么时候要使用二分查找 其实二分查找效率是有公式的  

 log_{2}n

二、什么是二分查找?  

        二分查找是一种算法,其输入是一个有序的元素列表(必须有序),如果要查找的元素包含在列表中,二分查找返回其元素序列位置,否则返回null。

12345........100

        不知道大家有没有玩过数字炸弹 这个和数字炸弹有点像 比如上面这个列表我需要找数字88的元素下标 我们如果使用傻找我们需要找88次 

我们现在使用二分查找的形式来看看是什么效果 我们先从中间开始查找 50  小了。这个时候我们就已经排除了一半的数字 再来 75 小了 这个时候就只剩下75-100之间了

接下来93(75-100中间的数字)大了 这个时候就剩75-93了 再一步一步的缩减范围 这样的形式就是二分查找了

三、代码示例

说那么多没用的 直接代码如下(示例):

        //数据列表
        int[] list = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int low = 0; //从哪个索引开始找
        int high = list.length-1; //最大查找索引值
        int item = 7; //需要查找的值
        int val=-1; //结果索引值 默认是-1未找到
        while (low < high) {
            int mid = (low + high) / 2;//当前查找的索引
            //向上取整因为java默认是向下取整 第一次可以忽略
            if ((low+high)%2>0&&low>0){
                ++mid;
            }
            int guess = list[mid];//当前值
            if (guess == item) {
                val=mid;
                break; //找到了 退出
            }
            if (guess > item) {
                //如果当前值大于要查找的值 就把最大值high缩小
                high = mid;
            } else {
                //如果当前值小于要查找的值 就把最小值low加大
                low = mid;
            }
        }
        System.out.println(val);// 查找到的索引值

总结

  • 二分查找是一种对数形式查找数据
  • 二分查找只能适合有序的列表
  • 二分查找是一个更高效的查找有序列表的方式
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuDuanWu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值