算法使用两个变量lo和hi,并保证如果键在数组中则它一定在a[lo..hi]中,然后方法进入一个循环,不断将数组的中间键(索引为mid)和被查找的键比较。
    如果被查找的键等于a[mid],返回mid;否则算法就将查找范围缩小一半,如果被查找的键小于
    atmid]就继续在左半边查找,如果被查找的键大于a[mid]就继续在右半边查找。算法找到被查找的键或是查找范围为空时该过程结束。

    1. public static int rank(int key, int[] arr) {
    2. int lo = 0;
    3. int hi = arr.length - 1;
    4. while (lo <= hi) {
    5. int mid = (hi - lo) / 2 + lo;
    6. if (key > arr[mid]) lo = mid + 1;
    7. else if (key < arr[mid]) hi = mid - 1;
    8. else return mid;
    9. }
    10. return -1;
    11. }

    image.png