KissFace
V2EX  ›  问与答

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

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

    哪位好心人可以贴下代码
    Supplement 1  ·  Apr 16, 2021
    此贴结
    zm8m93Q1e5otOC69
    zm8m93Q1e5otOC69
    Apr 15, 2021
    1
    这不就是二分查找吗?百度一下都有
    zm8m93Q1e5otOC69
    zm8m93Q1e5otOC69
    Apr 15, 2021
    2
    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
    zm8m93Q1e5otOC69
    Apr 15, 2021
    3
    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
    KissFace
    OP
    Apr 16, 2021
    4
    @beichenhpy 谢谢老哥
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2197 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:48 · PVG 21:48 · LAX 05:48 · JFK 08:48
    ♥ Do have faith in what you're doing.