Java极简算法-二分查找(log n)

举报
芝士味的椒盐 发表于 2022/04/19 13:12:09 2022/04/19
【摘要】 👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟🌈擅长领域:Java、大数据、运维、电子🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!@[TOC] 先以如下图查找5为...

在这里插入图片描述

👨🏻‍🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟
🌈擅长领域:Java、大数据、运维、电子
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!


@[TOC]

先以如下图查找5为案例展示

在这里插入图片描述

  • 简单查找要从某一个有序序列中查找需要n次,也就是时间复杂度微O(n),而二分查找在序列有序的情况下,每次范围缩小50%,时间复杂度为O(logn)显然比简单查找快了不知多少倍,如上案例,需要检索31元素位置,简单查找要找10次,而二分查找4次即可。

Java二分查找实现

/**
 * <p>
 * 二分查找
 * </p>
 *
 * @author starrysky
 * @since 2022/2/8
 */
public class BinarySearch {
    //必须微有序的数列
    static int[]  tag = {100,102,103,104,105,106,107,108,109,110};
    public static void main(String[] args) {
        System.out.println(search(tag,110));
    }
    public static int search(int[] tags, int item){
        int low = 0;
        int high = tags.length-1;
        while (low<=high){
            //向下取整
            int mid = (low + high)/2;
            int guess = tags[mid];
            if (guess==item){
                return mid;
            }else if (guess > item){
                //比目标值大,上界向下减
                high = mid - 1;
            }else{
                //比目标小,下界向上加
                low = mid + 1;
            }
        }
        return Integer.MAX_VALUE;
    }
}

  • 执行结果:
    在这里插入图片描述
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。