Java二分法----递归实现

    /**
     * 二分法--递归实现
     * @param nArray 升序数组
     * @param val 需要查找的值
     * @param startIndex 搜索起始点
     * @param endIndex 搜索结束点
     * @return 找到的位置,-1为未找到
     */
    public static int binarySearch(int[] nArray, int val, int startIndex, int endIndex){
        // 获取搜索片段的下标中间值
        int index = (startIndex + endIndex) / 2;
        // 若未找到值会报栈溢出错误,所以需要捕捉
        // 也有可能报数组下标越界异常
        // 索性直接捕捉所有错误和异常
        try {
            if (nArray[index] == val)
                return index;
            else if (nArray[index] > val)
                // index-1: 因为 nArray[index] 已经确认大于查找的值,需要把搜索结束点往左(小)移,故需要-1
                return binarySearch(nArray, val, startIndex, index-1);
            else /* if (nArray[index] < val) */
                // index+1: 因为 nArray[index] 已经确认小于查找的值,需要把搜索起始点往右(大)移,故需要+1
                return binarySearch(nArray, val, index+1, endIndex);
        }
        catch (Throwable t){
            return -1;
        }
    }
    // 测试
    public static void main(String[] args) {
        int[] nArray=new int[50];
        for (int i = 0; i < nArray.length; i++) {
            nArray[i] = i+1;
        }
        System.out.println(binarySearch(nArray,31,0,nArray.length-1)); // 30
    }

你可能感兴趣的:(Java二分法----递归实现)