前提:数组中的元素已经排好序

    1. //low和high分别表示当前查找的数组的第一个下标和最后一个下标
    2. public static int binarySearch(int[] list, int key) {
    3. int low = 0;
    4. int high = list.length - 1;
    5. while (high >= low) {
    6. //不能用>代替>=,当只有一个元素且就是需要寻找的元素时会漏掉
    7. int mid = (low + high) / 2;
    8. if (key < list[mid])
    9. high = mid - 1;
    10. else if (key == list[mid])
    11. return mid;
    12. else
    13. low = mid + 1;
    14. }
    15. return -low - 1;
    16. //没有找到匹配的元素时,low是一个插入点,不能直接返回low,当需要寻找的元素小于list[0]时,-low就是0,矛盾
    17. }