Java实现二分查找

简介: 描述:给定一个排好序的数组arr和一个数字x,让你在数组中找到x的下标,如果没有就返回-1;

描述:

给定一个排好序的数组arr和一个数字x,让你在数组中找到x的下标,如果没有就返回-1;


思路:

将数组二分,用数组中位数和x对比,如果中位数大于x,则去数组的左半边找,反之去右半边;

比方说数组是{1, 2, 3, 4, 5, 9},x为9

第一次:我们用数组中位数,即3(偶数的话选择中间两个中较小的)和9对比,9比3大,所以我们要去右半边找,此时数组为{4, 5, 9},以此递归,直至找到9=9;


实现:

public class HalfFind {
    public static void main(String[] args) {
        System.out.println("下标为:" + half(new int[]{1, 2, 3, 4, 5, 9}, 9, 0, 5));
    }
    //需要指定查找数组的边界left和right,如果不这样的话,new个新数组也能实现,但是浪费内存
    public static int half(int[] ints, int x, int left, int right) {
        if (ints == null || left > right || x < ints[left] || x > ints[right]) return -1;
        int center = (right + left) / 2;
        System.out.println("此次折半中位数下标为:" + center);
        if (ints[center] == x) {
            //如果相等,直接返回下标
            return center;
        } else if (ints[center] < x) {
            //如果小于,则去右半边继续找
            return half(ints, x, center + 1, right);
        } else {
            //如果大于,则去左半边继续找
            return half(ints, x, left, center - 1);
        }
    }
}

运行结果:

此次折半中位数下标为:2

此次折半中位数下标为:4

此次折半中位数下标为:5

下标为:5

相关文章
|
1月前
|
Java
java实现二分查找
java实现二分查找
25 0
|
9月前
|
Java
【Java每日一题,左二分查找】Where is the Marble?
【Java每日一题,左二分查找】Where is the Marble?
|
1天前
|
算法 Java 机器人
Java数据结构与算法:查找算法之二分查找
Java数据结构与算法:查找算法之二分查找
|
7天前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
15 1
|
2天前
|
Java
二分查找-非递归(java)
二分查找-非递归(java)
5 0
|
2天前
|
Java
二分查找-递归(java)
二分查找-递归(java)
4 0
|
6天前
|
人工智能 算法 Java
二分查找Java版
二分查找Java版
12 0
|
15天前
|
Java
Java二分查找小例子
Java二分查找小例子
10 0
|
1月前
|
存储 算法 Java
二分查找(Java) 详细讲解 一文足矣
二分查找(Java) 详细讲解 一文足矣
|
1月前
|
存储 算法 Java
java查找算法:二分查找、哈希查找等
java查找算法:二分查找、哈希查找等
32 1