Java 二分查找

简介: Java著名,高效并且应用广泛的二分查找算法.package 二分查找;import java.util.Arrays;public class BinarySearch { public static void main(String[] args) { i...

Java著名,高效并且应用广泛的二分查找算法.

package 二分查找;

import java.util.Arrays;

public class BinarySearch {

    public static void main(String[] args) {

        int[] a = { 123, 423, 21, 321, 12, 341, 3213, 42 };
        // The array must be orderly
        Arrays.sort(a);
        for(int x : a) {
            System.out.print(x+" ");
        }
        System.out.println();
        int rank = rank(123, a);
        System.out.println(rank);
    }

    public static int rank(int key, int[] a) {

        int lo = 0;
        int hi = a.length - 1;

        while (lo <= hi) {
            // 被查找的键要么不存在,要么必然存在于a[lo...hi]之中.
            int mid = lo + (hi - lo) / 2;
            if (key < a[mid]) {
                // 如果key小于a数组的一半大小下标中的数据,那么就可以让最大下标hi减小范围至mid-1
                hi = mid - 1;
            } else if (key > a[mid]) {
                // 如果key大于a数组下标的一半中的数据,那么最小下标从mid基础上+1
                lo = mid + 1;
            } else {
                return mid;
            }
        }
        //不存在返回-1
        return -1;

    }

}

 该算法是由静态方法rank()实现的,它接受一个整数键key和一个已经有序的int数组作为参数.如果该键存在于数组中则返回它的索引,否则返回-1.

算法使用两个变量lo和hi,并保证如果键key在数组中则它一定在a[lo...hi]中,然后方法进入一个循环,不断将数组的中间键(mid)和被查找的键比较.

如果被查找的键key等于a[mid],则返回mid;否则算法就将查找范围缩小一半,如果被查找的键key小于a[mid]就将最大下标lo缩减至mid-1(在数组左半边-1继续查找)

如果被查找的键key大于a[mid]就继续在右半边查找(lo最小下标升级为mid+1),算法找到被查找的键key或是查找范围为空时该过程结束.

二分查找之所以快是因为它只需检查很少几个条目(相对于数组的大小)就能够找到目标元素(或者确认目标元素不存在).

https://www.processon.com/view/link/5b2308e4e4b02539617ea55c <图示

将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。
相关文章
|
5月前
|
Java
java实现二分查找
java实现二分查找
40 0
【Java每日一题,左二分查找】Where is the Marble?
【Java每日一题,左二分查找】Where is the Marble?
|
8天前
|
Java
在 Java 中实现二分查找法
【10月更文挑战第9天】
15 1
|
13天前
|
算法 Java
java冒泡排序与二分查找(详解)
java冒泡排序与二分查找(详解)
28 4
|
3月前
|
算法 Java
Java 使用二分查找快速定位元素位置
Java 使用二分查找快速定位元素位置
19 0
|
4月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
47 1
|
4月前
|
Java
二分查找-非递归(java)
二分查找-非递归(java)
|
4月前
|
Java
二分查找-递归(java)
二分查找-递归(java)
|
4月前
|
人工智能 算法 Java
二分查找Java版
二分查找Java版
32 0
|
4月前
|
Java
Java二分查找小例子
Java二分查找小例子
20 0