0
点赞
收藏
分享

微信扫一扫

二分查找法。泛型设计二分查找法。

楠蛮鬼影 2022-03-22 阅读 70

前言基础:

1、只能针对有序的数组进行查找。

2、时间复杂度为O(logn)。

3、使用前可以先排序,然后再查找,广泛应用于当一大组数据需要频繁查找,于是我们先将其进行排序,然后再通过二分查找进行查找。

4、主要有两种实现方式:递归法和非递归法。


查找过程:


 代码部分:(非递归与递归算法)

public class BinarySearch {
    public BinarySearch() {
    }

    //1、非递归实现:
    public static <E extends Comparable<E>> int search(E arr[], E target) {
        int start = 0, end = arr.length - 1;

        //此处是小于等于end,每次在arr[start,end]中查找
        //while循环就是在保证里面有元素,条件都是根据循环不变量来确定的
        while (start <= end) {     
            int mid = (start + end) / 2;

            if (arr[mid].compareTo(target) == 0)
                return mid;
            if (arr[mid].compareTo(target) > 0)
                end = mid - 1;
            else
                start = mid + 1;
        }
        return -1;
    }

    //2、递归方式
    public static <E extends Comparable<E>> int search_D(E arr[], E target) {
        return search_D(arr, target, 0, arr.length - 1);
    }

    private static <E extends Comparable<E>> int search_D(E[] arr, E target, int start, int end) {
        if (start > end) return -1; //此处不取等,因为当start>end时数组为空数组,不符合条件,所以才返回-1

        int mid = (start + end) / 2;

        if (arr[mid].compareTo(target) == 0)
            return mid;

        if (arr[mid].compareTo(target) > 0)
            return search_D(arr, target, start, mid - 1);
        else
            return search_D(arr, target, mid + 1, end);
    }
}
举报

相关推荐

0 条评论