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

"本文介绍了如何在有序数组中通过二分查找算法来寻找特定数值的下标。首先确定数组中间下标,然后将目标值与中间值比较,根据比较结果递归地在左侧或右侧子数组中继续查找。当找到目标值时返回其下标,否则在遍历完整个数组后返回-1。示例代码展示了如何在数组{1,8,10,89,1000,1024}
摘要由CSDN通过智能技术生成

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

需求

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

思路分析:

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

1.mid=(left+right)/2

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

    2.1findval>arr[mid]说明你要查找的数字在mid的右边,因此需要递归的向右进行查找

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

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

什么时候需要结束递归?

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

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

代码实现

/**
 * 二分查找
 * 使用二分查找的前提 数组必须有序  从小到大 从大到小都可以
 *
 * @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;
    }
}

输出

5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值