算法

java 有序数组查找指定数字位置(二分查找)

2018-10-25  本文已影响0人  GentleWind

由二分查找实现,实现复杂度为O(log n):

    /**
     * 查找有序数组指定数字位置。
     * @param a 输入数组
     * @param n 查找数字
     * @param low 数组左边界
     * @param high 数组右边界
     * @return
     */
    private static int getLocation(int[] a, int n, int low, int high){
        if(n >= a[0] && n <= a[a.length - 1]){
            int mid = (high + low)/2;

            //判断输入参数
            if(low > high){
                return -1;
            }

            //递归进行二分查找
            if(n < a[mid]){
                return getLocation(a, n, low, mid-1);
            }else if(a[mid] > n){
                return getLocation(a, n, mid+1, high);
            }else{
                return mid;
            }
        }else{
            throw new RuntimeException("所查询数字不在所属数组内!");
        }
    }

ps:如果有什么错误的地方欢迎指正。

上一篇 下一篇

猜你喜欢

热点阅读