JAVA基础 ---- 利用二分查找+递归实现简单查找数据

简介: JAVA基础 ---- 利用二分查找+递归实现简单查找数据

题目,给定一个数组,要求查找出对应30所对应的索引

1.利用静态创建数组方式创建数组数字如下{30, 20, 2, 4, 50, 99, 12, 87, 52}
2.查找30对应的索引位置
3.输出打印找到的索引位置

解题思路:
1.假设给定的数列是有序的
2.从数列中查找中间元素,并保存
3.拿目标元素和中间元素进行比较
4.如果目标元素大于中间元素,则去中间元素的右边查找
5.如果目标元素小于中间元素,则去中间元素的左边查找
6.重复执行步骤3,采用递归的思想

public static void main(String[] args){
        int[] num = {30, 20, 2, 4, 50, 99, 12, 87, 52};
        Arrays.sort(num);
        int data = 30;
        int index = find(num, data, 0, num.length);
        System.out.println("数字"+data+"索引是"+index);
}

 /**
     * 实现二分查找数字,采用递归实现
     * @param arr   源数组
     * @param data  要查找的数据
     * @param left  最左方索引
     * @param right 最右方索引
     * @return  返回要查找的值的索引
     */
    public static  int find(int[] arr, int data, int left, int right) {
        //保证未到最后一位
        while (left <= right) {
            //分半查找
            int index = (left + right) / 2;
            //如果要查找的数字等于当前数字,返回当前坐标
            if (data == arr[index]) {
                return  index;
            } else if (data < arr[index]) {
                //查找的数字小于当前数字,那么证明范围在当前数字左方
                return find(arr, data, left, index-1);
            }
            //查找的数字大于当前数字,证明范围在分半的右方
            return  find(arr, data, index+1, right);
        }
        //未找到返回-1
        return -1;
    }

如有我未发现的bug,望各位大佬指出,感谢感谢,制作不易,望支持🤞🤞

相关文章
|
10天前
|
Java
java实现二分查找
java实现二分查找
13 0
|
25天前
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
20 1
|
1月前
|
存储 算法 Java
Java中的集合框架:高效管理数据的关键
Java中的集合框架:高效管理数据的关键
16 0
|
1月前
|
存储 Java
JAVA字符串与其他类型数据的转换
JAVA字符串与其他类型数据的转换
27 4
|
25天前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
15 1
|
17天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
22 4
|
28天前
|
缓存 NoSQL Java
java中复杂业务情况下的集合操作(增减集合同步数据)
java中复杂业务情况下的集合操作(增减集合同步数据)
26 0
|
1月前
|
算法 Java
Java必刷入门递归题×5(内附详细递归解析图)
Java必刷入门递归题×5(内附详细递归解析图)
21 1
|
1月前
|
网络协议 Java
Java——UDP数据报
Java——UDP数据报
12 0
C4.
|
1月前
|
机器学习/深度学习 存储 搜索推荐
Java的递归
Java的递归
C4.
7 0