非递归方式实现

 public static int findTwoPoint(int[] array, int key) {
         int start = 0;
         int last = array.length - 1;
         while (start <= last) {
             int mid = (last - start) / 2 + start;//防止直接相加造成int范围溢出
             if (key == array[mid]) {//查找值等于当前值,返回数组下标
                 return mid;
            }
             if (key > array[mid]) {//查找值比当前值大
                 start = mid + 1;
            }
             if (key < array[mid]) {//查找值比当前值小
                 last = mid - 1;
            }
        }
         return -1;
    }

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

递归方式实现

 public static int search(int[] array, int key, int low, int high) {
         int mid = (high - low) / 2 + low;
         if (key == array[mid]) {
             return key;
        } else {
             while (low <= high) {
                 if (key < array[mid]) {//查找值比当前值小
                     return search(array, key, low, mid - 1);
                }
                 if (key > array[mid]) {//查找值比当前值大
                     return search(array, key, mid + 1, high);
                }
            }
        }
         return -1;
    }

递归原理详解

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄