欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分查找思想及实现

程序员文章站 2022-03-14 23:03:52
...

使用二分查找必须满足集合有序,只有集合有序时才能使用二分

思想:找出中点元素,此时左侧全是小于它的元素,右侧全是大于它的元素,根据需要选择左半边或右半边,直到找到对应元素

实现:

// 递归实现
public boolean find(int[] num, int start, int end, int val) {
    if (start > end) {
        return false;
    }
    int mid = start + (end - start) / 2;
    if (num[mid] == val) {
        return true;
    }
    return num[mid] > val ? find(num, start, mid - 1, val) : find(num, mid + 1, end, val);
}

// 非递归实现
public boolean find2(int[] num, int start, int end, int val) {
    while (start <= end) {
        int mid = start + (end - start) / 2;
        if (num[mid] == val) {
            return true;
        } else if (num[mid] > val) {
            end = mid - 1;
        } else {
            start = mid + 1;
        }
    }
    return false;
}