前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构与算法之二分查找

数据结构与算法之二分查找

作者头像
暴躁的程序猿
发布2022-03-24 14:07:55
1650
发布2022-03-24 14:07:55
举报
文章被收录于专栏:阿飞的学习记录

使用前提:二分查找需要在有序数组中进行查找

需求

请对一个有序数组进行二分查找{1,8,10,89,1000,1024},输入一个数字看看该数组中是否存在此数,并且求出下标,如果没有就返回“-1”

思路分析:

首先确定该数组的中间下标

1.mid=(left+right)/2

2.然后让需要查找的数findval和arr[mid]比较

代码语言:javascript
复制
    2.1findval>arr[mid]说明你要查找的数字在mid的右边,因此需要递归的向右进行查找

    2.2findval<arr[mid]说明你要查找的数字咋mid的左边,因此需要递归的向左进行查找

    2.3findval==arr[mid]说明找到,就返回

什么时候需要结束递归?

1.找到了数据就结束递归

2.递归完整个数组,仍然没有找到findval,也需要结束递归 当left>right就需要退出

代码实现

代码语言:javascript
复制
/**
 * 二分查找
 * 使用二分查找的前提 数组必须有序  从小到大 从大到小都可以
 *
 * @create: 2021/10/2
 * @author: Tony Stark
 */
public class BinarySearch {
    public static void main(String[] args) {
        int[] arr = {1, 8, 10, 89, 1000, 1024};
        int i = binarySearch(arr, 0, arr.length - 1, 1024);
        System.out.println(i);
    }

    /**
     * 二分查找的方法
     * @param arr  数组
     * @param left   左边的索引
     * @param right   右边的索引
     * @param findVal  要查找的值
     * @return  如果找到就返回下标  ,没有找到就返回-1
     */
    public static int binarySearch(int[] arr,int left,int right,int findVal){

        //当left大于right时说明递归了整个数组但是没有找到
        if (left>right){
            return -1;
        }
        //中间值的下标
        int mid=(left+right)/2;
        //中间值
        int midVal=arr[mid];
        //如果要找的值大于中间值   向右递归  现在数组是从小到大  所以向右递归
        if (findVal>midVal){
              //向右递归
           return binarySearch(arr,mid+1,right,findVal);
        }else if(findVal<midVal){
            //如果要找的值小于中间值向左递归
            return binarySearch(arr, left,mid-1, findVal);
        }else if (findVal==midVal){
            //这种情况就是找到了那个数字
            return mid;
        }
        return -1;
    }
}

输出

代码语言:javascript
复制
5
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档