KissFace
V2EX  ›  问与答

迫于考试,请教各位大佬一个 Java 二分查找算法

  •  
  •   KissFace · Apr 15, 2021 · 1120 views
    This topic created in 1889 days ago, the information mentioned may be changed or developed.
    题目:给定一个递增排序的数组,查找某个数字是否在数组中,如果在数组中,则返回该数字在数组中第一次出现的位置(从 0 开始);如果不在数组中,返回-1 。务必使用二分查找的方式

    哪位好心人可以贴下代码
    Supplement 1  ·  Apr 16, 2021
    此贴结
    zm8m93Q1e5otOC69
        1
    zm8m93Q1e5otOC69  
       Apr 15, 2021
    这不就是二分查找吗?百度一下都有
    zm8m93Q1e5otOC69
        2
    zm8m93Q1e5otOC69  
       Apr 15, 2021
    public static int binarySearch(int[] arrays, int key, int start, int end) {
    if (key < arrays[start] || key > arrays[end] || start > end) {
    return -1;
    }
    int mid = (start + end) / 2;
    if (arrays[mid] > key) {
    return binarySearch(arrays, key, start, mid - 1);
    } else if (arrays[mid] < key) {
    return binarySearch(arrays, key, mid + 1, end);
    } else {
    return mid;
    }
    }
    zm8m93Q1e5otOC69
        3
    zm8m93Q1e5otOC69  
       Apr 15, 2021
    jdk 的写法
    // Like public version, but without range checks.
    private static int binarySearch0(int[] a, int fromIndex, int toIndex,
    int key) {
    int low = fromIndex;
    int high = toIndex - 1;

    while (low <= high) {
    int mid = (low + high) >>> 1;
    int midVal = a[mid];

    if (midVal < key)
    low = mid + 1;
    else if (midVal > key)
    high = mid - 1;
    else
    return mid; // key found
    }
    return -(low + 1); // key not found.
    }
    KissFace
        4
    KissFace  
    OP
       Apr 16, 2021
    @beichenhpy 谢谢老哥
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3266 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 11:03 · PVG 19:03 · LAX 04:03 · JFK 07:03
    ♥ Do have faith in what you're doing.