每日数据结构算法打卡——二分查找

184 阅读1分钟

前言

二分查找又叫折半查找,只使用有序的数组集合,每次拿中间元素和目标元素进行比较,如果大于目标元素则去中间元素左边的元素中继续查找,如果小于目标元素则取中间元素右边的元素查找。将搜索的时间复杂度从O(n)降到O(logn).

代码实现

非递归实现
/**
     * -1表示未找到
     * @param array
     * @param target
     * @return
     */
    public static int binarySearch(int[] array,int target){
        if (array.length == 0){
            return -1;
        }
        int left =0;
        int right = array.length-1;
        while (left <= right){
            int mid = (left + right)/2;
            if (array[mid] == target){
                return mid;
            }else if (array[mid] < target){
                left = mid + 1;
            }else{
                right = mid -1;
            }
        }
        return -1;
    }
递归实现
/**
     * 递归实现
     * @param array
     * @param target
     * @param left
     * @param right
     * @return
     */
    public static int binarySearch2(int[] array,int target,int left,int right){
        if (left <= right){
            int mid = (left + right)/2;
            if (array[mid] == target){
                return mid;
            }else if (array[mid] < target){
                return binarySearch2(array,target,mid+1,right);
            }else{
                return binarySearch2(array,target,left,mid-1);
            }
        }
        return -1;
    }